Skip to content

Commit 46af28f

Browse files
authored
Merge pull request #68 from douzzer/20241007-C23-fortify-source-llvm-20-etc
20241007-C23-fortify-source-llvm-20-etc
2 parents eb5cfb5 + 272586b commit 46af28f

File tree

12 files changed

+392
-277
lines changed

12 files changed

+392
-277
lines changed

Makefile.analyzers

Lines changed: 54 additions & 11 deletions
Large diffs are not rendered by default.

src/actions.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static wolfsentry_errcode_t wolfsentry_action_init_1(const char *label, int labe
5252
if (label_len <= 0)
5353
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
5454

55-
if (action_size < sizeof *action + (size_t)label_len + 1)
55+
if (action_size < offsetof(struct wolfsentry_action, label) + (size_t)label_len + 1)
5656
WOLFSENTRY_ERROR_RETURN(BUFFER_TOO_SMALL);
5757

5858
memset(&action->header, 0, sizeof action->header);
@@ -107,7 +107,7 @@ WOLFSENTRY_LOCAL wolfsentry_errcode_t wolfsentry_action_clone(
107107
struct wolfsentry_table_ent_header **new_ent,
108108
wolfsentry_clone_flags_t flags)
109109
{
110-
struct wolfsentry_action * const src_action = (struct wolfsentry_action * const)src_ent;
110+
const struct wolfsentry_action * const src_action = (const struct wolfsentry_action * const)src_ent;
111111
struct wolfsentry_action ** const new_action = (struct wolfsentry_action ** const)new_ent;
112112
size_t new_size = sizeof *src_action + (size_t)(src_action->label_len) + 1;
113113

@@ -178,11 +178,12 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_action_insert(
178178

179179
WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_action_delete(WOLFSENTRY_CONTEXT_ARGS_IN, const char *label, int label_len, wolfsentry_action_res_t *action_results) {
180180
wolfsentry_errcode_t ret;
181-
struct {
182-
struct wolfsentry_action action;
183-
byte buf[WOLFSENTRY_MAX_LABEL_BYTES+1];
184-
} target;
185-
struct wolfsentry_action *target_p = &target.action;
181+
WOLFSENTRY_STACKBUF(
182+
struct wolfsentry_action,
183+
label,
184+
WOLFSENTRY_MAX_LABEL_BYTES+1,
185+
target);
186+
struct wolfsentry_action *target_p = &target.target;
186187

187188
if ((label_len == 0) || (label == NULL))
188189
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
@@ -195,12 +196,12 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_action_delete(WOLFSENTRY_CONTEXT_
195196
WOLFSENTRY_ERROR_RETURN(STRING_ARG_TOO_LONG);
196197
}
197198

198-
ret = wolfsentry_action_init_1(label, label_len, WOLFSENTRY_ACTION_FLAG_NONE, NULL, NULL, &target.action, sizeof target);
199+
ret = wolfsentry_action_init_1(label, label_len, WOLFSENTRY_ACTION_FLAG_NONE, NULL, NULL, &target.target, sizeof target);
199200
WOLFSENTRY_RERETURN_IF_ERROR(ret);
200201

201202
WOLFSENTRY_MUTEX_OR_RETURN();
202203

203-
target.action.header.parent_table = &wolfsentry->actions->header;
204+
target.target.header.parent_table = &wolfsentry->actions->header;
204205

205206
if ((ret = wolfsentry_table_ent_delete(WOLFSENTRY_CONTEXT_ARGS_OUT, (struct wolfsentry_table_ent_header **)&target_p)) < 0)
206207
goto out;

src/addr_families.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,11 @@ static wolfsentry_errcode_t wolfsentry_addr_family_get_byname_1(
264264
struct wolfsentry_addr_family_bynumber **addr_family)
265265
{
266266
wolfsentry_errcode_t ret;
267-
struct {
268-
struct wolfsentry_addr_family_byname target;
269-
byte buf[WOLFSENTRY_MAX_LABEL_BYTES];
270-
} target;
267+
WOLFSENTRY_STACKBUF(
268+
struct wolfsentry_addr_family_byname,
269+
name,
270+
WOLFSENTRY_MAX_LABEL_BYTES,
271+
target);
271272

272273
struct wolfsentry_addr_family_byname *addr_family_1 = &target.target;
273274

src/events.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static wolfsentry_errcode_t wolfsentry_event_init_1(const char *label, int label
5656
if (label_len <= 0)
5757
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
5858

59-
if (event_size < sizeof *event + (size_t)label_len + 1)
59+
if (event_size < offsetof(struct wolfsentry_event, label) + (size_t)label_len + 1)
6060
WOLFSENTRY_ERROR_RETURN(BUFFER_TOO_SMALL);
6161

6262
memset(&event->header, 0, sizeof event->header);
@@ -134,7 +134,7 @@ WOLFSENTRY_LOCAL wolfsentry_errcode_t wolfsentry_event_clone_bare(
134134
struct wolfsentry_table_ent_header ** const new_ent,
135135
wolfsentry_clone_flags_t flags)
136136
{
137-
struct wolfsentry_event * const src_event = (struct wolfsentry_event * const)src_ent;
137+
const struct wolfsentry_event * const src_event = (const struct wolfsentry_event * const)src_ent;
138138
struct wolfsentry_event ** const new_event = (struct wolfsentry_event ** const)new_ent;
139139
size_t new_size = sizeof *src_event + (size_t)(src_event->label_len) + 1;
140140

@@ -316,11 +316,12 @@ WOLFSENTRY_API const struct wolfsentry_event *wolfsentry_event_get_aux_event(con
316316

317317
static wolfsentry_errcode_t wolfsentry_event_get_1(WOLFSENTRY_CONTEXT_ARGS_IN, const char *label, int label_len, struct wolfsentry_event **event) {
318318
wolfsentry_errcode_t ret;
319-
struct {
320-
struct wolfsentry_event event;
321-
byte buf[WOLFSENTRY_MAX_LABEL_BYTES];
322-
} target;
323-
struct wolfsentry_event *event_1 = &target.event;
319+
WOLFSENTRY_STACKBUF(
320+
struct wolfsentry_event,
321+
label,
322+
WOLFSENTRY_MAX_LABEL_BYTES,
323+
target);
324+
struct wolfsentry_event *event_1 = &target.target;
324325

325326
if (label_len == 0)
326327
WOLFSENTRY_ERROR_RETURN(INVALID_ARG);
@@ -329,7 +330,7 @@ static wolfsentry_errcode_t wolfsentry_event_get_1(WOLFSENTRY_CONTEXT_ARGS_IN, c
329330
if (label_len > WOLFSENTRY_MAX_LABEL_BYTES)
330331
WOLFSENTRY_ERROR_RETURN(STRING_ARG_TOO_LONG);
331332

332-
ret = wolfsentry_event_init_1(label, label_len, 0, NULL, &target.event, sizeof target);
333+
ret = wolfsentry_event_init_1(label, label_len, 0, NULL, &target.target, sizeof target);
333334
WOLFSENTRY_RERETURN_IF_ERROR(ret);
334335

335336
ret = wolfsentry_table_ent_get(WOLFSENTRY_CONTEXT_ARGS_OUT, &wolfsentry->events->header, (struct wolfsentry_table_ent_header **)&event_1);

src/json/centijson_value.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ json_value_string(const JSON_VALUE* v)
839839
WOLFSENTRY_API size_t
840840
json_value_string_length(const JSON_VALUE* v)
841841
{
842-
uint8_t* payload;
842+
const uint8_t* payload;
843843
size_t off = 0;
844844
size_t len = 0;
845845
unsigned shift = 0;

src/json/load_config.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,9 +1902,11 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_config_json_feed(
19021902
WOLFSENTRY_SET_BITS(jps->load_flags, WOLFSENTRY_CONFIG_LOAD_FLAG_FINI);
19031903
if (err_buf) {
19041904
if (WOLFSENTRY_ERROR_DECODE_SOURCE_ID(jps->fini_ret) == WOLFSENTRY_SOURCE_ID_UNSET)
1905-
snprintf(err_buf, err_buf_size, "json_feed failed at offset %d, line %u, col %u, with centijson code " WOLFSENTRY_ERRCODE_FMT ": %s", (int)json_pos.offset, json_pos.line_number, json_pos.column_number, (int)jps->fini_ret, json_error_str(jps->fini_ret));
1905+
ret = snprintf(err_buf, err_buf_size, "json_feed failed at offset %d, line %u, col %u, with centijson code " WOLFSENTRY_ERRCODE_FMT ": %s", (int)json_pos.offset, json_pos.line_number, json_pos.column_number, (int)jps->fini_ret, json_error_str(jps->fini_ret));
19061906
else
1907-
snprintf(err_buf, err_buf_size, "json_feed failed at offset %d, line %u, col %u, with " WOLFSENTRY_ERROR_FMT, (int)json_pos.offset, json_pos.line_number, json_pos.column_number, WOLFSENTRY_ERROR_FMT_ARGS(jps->fini_ret));
1907+
ret = snprintf(err_buf, err_buf_size, "json_feed failed at offset %d, line %u, col %u, with " WOLFSENTRY_ERROR_FMT, (int)json_pos.offset, json_pos.line_number, json_pos.column_number, WOLFSENTRY_ERROR_FMT_ARGS(jps->fini_ret));
1908+
if (ret >= (int)err_buf_size)
1909+
err_buf[err_buf_size - 1] = 0;
19081910
}
19091911
WOLFSENTRY_ERROR_RERETURN(wolfsentry_centijson_errcode_translate(jps->fini_ret));
19101912
}
@@ -1941,9 +1943,14 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_config_json_fini(
19411943
} else {
19421944
(*jps)->fini_ret = json_fini(&(*jps)->parser, &json_pos);
19431945
if ((*jps)->fini_ret < 0) {
1944-
if (err_buf != NULL)
1945-
snprintf(err_buf, err_buf_size, "json_fini failed at offset %d, line %u, col %u, with code " WOLFSENTRY_ERRCODE_FMT ": %s.",
1946-
(int)json_pos.offset,json_pos.line_number, json_pos.column_number, (int)(*jps)->fini_ret, json_error_str((*jps)->fini_ret));
1946+
if (err_buf != NULL) {
1947+
if (snprintf(err_buf, err_buf_size, "json_fini failed at offset %d, line %u, col %u, with code " WOLFSENTRY_ERRCODE_FMT ": %s.",
1948+
(int)json_pos.offset,json_pos.line_number, json_pos.column_number, (int)(*jps)->fini_ret, json_error_str((*jps)->fini_ret))
1949+
>= (int)err_buf_size)
1950+
{
1951+
err_buf[err_buf_size - 1] = 0;
1952+
}
1953+
}
19471954
ret = wolfsentry_centijson_errcode_translate((*jps)->fini_ret);
19481955
goto out;
19491956
}

0 commit comments

Comments
 (0)