From: Nick Porter Date: Tue, 22 Oct 2024 08:15:08 +0000 (+0100) Subject: Set return type for escape functions to ssize_t X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f22659db5ebb9672911e0c49ca2c252dc97c07c;p=thirdparty%2Ffreeradius-server.git Set return type for escape functions to ssize_t So failures can be reported back --- diff --git a/src/lib/json/base.h b/src/lib/json/base.h index 61fbb5752c1..3c83655354e 100644 --- a/src/lib/json/base.h +++ b/src/lib/json/base.h @@ -236,7 +236,7 @@ extern conf_parser_t const fr_json_format_config[]; /* jpath .c */ typedef struct fr_jpath_node fr_jpath_node_t; -size_t fr_jpath_escape_func(UNUSED request_t *request, char *out, size_t outlen, +ssize_t fr_jpath_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg); int fr_jpath_evaluate_leaf(TALLOC_CTX *ctx, fr_value_box_list_t *out, diff --git a/src/lib/json/jpath.c b/src/lib/json/jpath.c index 8dde82c609b..a69f0df3752 100644 --- a/src/lib/json/jpath.c +++ b/src/lib/json/jpath.c @@ -103,7 +103,7 @@ static char const escape_chars[] = "[],*.:()?"; * @param arg uctx data, not used. * @return the number of chars written to out. */ -size_t fr_jpath_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) +ssize_t fr_jpath_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) { char const *p = in; char *q = out, *end = out + outlen; diff --git a/src/lib/server/util.c b/src/lib/server/util.c index 4f483102971..52b111adacb 100644 --- a/src/lib/server/util.c +++ b/src/lib/server/util.c @@ -93,7 +93,7 @@ void (*reset_signal(int signo, void (*func)(int)))(int) * @param in string to escape. * @param arg Context arguments (unused, should be NULL). */ -size_t rad_filename_make_safe(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) +ssize_t rad_filename_make_safe(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) { char const *q = in; char *p = out; @@ -213,7 +213,7 @@ int rad_filename_box_make_safe(fr_value_box_t *vb, UNUSED void *uxtc) * @param in string to escape. * @param arg Context arguments (unused, should be NULL). */ -size_t rad_filename_escape(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) +ssize_t rad_filename_escape(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg) { size_t freespace = outlen; diff --git a/src/lib/server/util.h b/src/lib/server/util.h index e37c67bfebc..7c0485d5830 100644 --- a/src/lib/server/util.h +++ b/src/lib/server/util.h @@ -34,10 +34,10 @@ extern "C" { #include void (*reset_signal(int signo, void (*func)(int)))(int); -size_t rad_filename_make_safe(UNUSED request_t *request, char *out, size_t outlen, +ssize_t rad_filename_make_safe(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg); int rad_filename_box_make_safe(fr_value_box_t *vb, UNUSED void *uxtc); -size_t rad_filename_escape(UNUSED request_t *request, char *out, size_t outlen, +ssize_t rad_filename_escape(UNUSED request_t *request, char *out, size_t outlen, char const *in, UNUSED void *arg); int rad_filename_box_escape(fr_value_box_t *vb, UNUSED void *uxtc); ssize_t rad_filename_unescape(char *out, size_t outlen, char const *in, size_t inlen); diff --git a/src/lib/unlang/xlat.h b/src/lib/unlang/xlat.h index f278032caf6..273818188c2 100644 --- a/src/lib/unlang/xlat.h +++ b/src/lib/unlang/xlat.h @@ -52,7 +52,7 @@ typedef struct xlat_thread_inst_s xlat_thread_inst_t; #include -typedef size_t (*xlat_escape_legacy_t)(request_t *request, char *out, size_t outlen, char const *in, void *arg); +typedef ssize_t (*xlat_escape_legacy_t)(request_t *request, char *out, size_t outlen, char const *in, void *arg); #include #include diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c index b00ae393151..55efd057e06 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c @@ -835,7 +835,7 @@ static int sql_affected_rows(fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t return mysql_affected_rows(conn->sock); } -static size_t sql_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, void *arg) +static ssize_t sql_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, void *arg) { size_t inlen; connection_t *c = talloc_get_type_abort(arg, connection_t); diff --git a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c index b59359faa27..f6bb2bc55ea 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c @@ -655,7 +655,7 @@ static int sql_affected_rows(fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t return conn->affected_rows; } -static size_t sql_escape_func(request_t *request, char *out, size_t outlen, char const *in, void *arg) +static ssize_t sql_escape_func(request_t *request, char *out, size_t outlen, char const *in, void *arg) { size_t inlen, ret; connection_t *c = talloc_get_type_abort(arg, connection_t); diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index af059d05695..65dbe9f5a38 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -328,7 +328,7 @@ static sql_fall_through_t fall_through(map_list_t *maps) /* * Yucky prototype. */ -static size_t sql_escape_func(request_t *, char *out, size_t outlen, char const *in, void *arg); +static ssize_t sql_escape_func(request_t *, char *out, size_t outlen, char const *in, void *arg); /** Escape a tainted VB used as an xlat argument * @@ -338,7 +338,7 @@ static int CC_HINT(nonnull(2,3)) sql_xlat_escape(request_t *request, fr_value_bo fr_sbuff_t sbuff; fr_sbuff_uctx_talloc_t sbuff_ctx; - size_t len; + ssize_t len; void *arg; rlm_sql_escape_uctx_t *ctx = uctx; rlm_sql_t const *inst = talloc_get_type_abort_const(ctx->sql, rlm_sql_t); @@ -391,6 +391,7 @@ static int CC_HINT(nonnull(2,3)) sql_xlat_escape(request_t *request, fr_value_bo } len = inst->sql_escape_func(request, fr_sbuff_buff(&sbuff), vb->vb_length * 3 + 1, vb->vb_strvalue, arg); + if (len < 0) goto error; /* * fr_value_box_strdup_shallow resets the dlist entries - take a copy @@ -863,7 +864,7 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void const *mod_inst, /** xlat escape function for drivers which do not provide their own * */ -static size_t sql_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, void *arg) +static ssize_t sql_escape_func(UNUSED request_t *request, char *out, size_t outlen, char const *in, void *arg) { rlm_sql_t const *inst = talloc_get_type_abort_const(arg, rlm_sql_t); size_t len = 0;