diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-08-12 15:40:41 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-08-12 15:40:41 -0400 |
| commit | 10d44e7ff547a806e4bf109e7aadd48488ddc9f0 (patch) | |
| tree | 2c558733c05cf3b33d6d68627d0b52fe89988985 /src/Routes | |
| parent | f20d8f711588a1918a6d75b99b0e11d745ca8395 (diff) | |
| download | omnisearch-10d44e7ff547a806e4bf109e7aadd48488ddc9f0.tar.gz | |
fix: improvements allocation safety and string processing
Diffstat (limited to 'src/Routes')
| -rw-r--r-- | src/Routes/Search.c | 77 |
1 files changed, 36 insertions, 41 deletions
diff --git a/src/Routes/Search.c b/src/Routes/Search.c index abc2e73..a245f6b 100644 --- a/src/Routes/Search.c +++ b/src/Routes/Search.c @@ -251,22 +251,20 @@ static void *infobox_thread_func(void *arg) { return NULL; } -static int add_infobox_to_collection(InfoBox *infobox, char ****collection, - int **inner_counts, int current_count) { +static int add_infobox_to_collection(InfoBox *infobox, + StringMatrix *collection) { const char *values[INFOBOX_FIELD_COUNT] = { infobox->title, infobox->thumbnail_url, infobox->extract, infobox->url, infobox->url, }; - return append_string_row(collection, inner_counts, current_count, values, - INFOBOX_FIELD_COUNT); + return string_matrix_append(collection, values, INFOBOX_FIELD_COUNT); } static int add_warning_to_collection(const char *engine_name, const char *warning_message, - char ****collection, int **inner_counts, - int current_count) { + StringMatrix *collection) { const char *values[] = {engine_name, warning_message}; - return append_string_row(collection, inner_counts, current_count, values, 2); + return string_matrix_append(collection, values, 2); } static void free_user_engine_list(char **user_engines, int user_engine_count) { @@ -587,15 +585,14 @@ int results_handler(UrlParams *params) { } if (filter_engine_count > 1) { - char ***filter_matrix = NULL; - int *filter_inner_counts = NULL; - int filter_count = 0; + StringMatrix filter_matrix; + string_matrix_init(&filter_matrix); char *all_href = build_search_href(raw_query, "all", 1); - - filter_count = add_link_to_collection( + const char *all_values[LINK_FIELD_COUNT] = { all_href, "All", - selected_engine ? "engine-filter" : "engine-filter active", - &filter_matrix, &filter_inner_counts, filter_count); + selected_engine ? "engine-filter" : "engine-filter active"}; + + string_matrix_append(&filter_matrix, all_values, LINK_FIELD_COUNT); free(all_href); for (int i = 0; i < ENGINE_COUNT; i++) { @@ -611,17 +608,18 @@ int results_handler(UrlParams *params) { ? "engine-filter active" : "engine-filter"; - filter_count = add_link_to_collection( - filter_href, ENGINE_REGISTRY[i].name, filter_class, &filter_matrix, - &filter_inner_counts, filter_count); + const char *filter_values[LINK_FIELD_COUNT] = { + filter_href, ENGINE_REGISTRY[i].name, filter_class}; + string_matrix_append(&filter_matrix, filter_values, LINK_FIELD_COUNT); free(filter_href); } - if (filter_count > 0) { - context_set_array_of_arrays(&ctx, "engine_filters", filter_matrix, - filter_count, filter_inner_counts); - free_string_matrix(filter_matrix, filter_inner_counts, filter_count); + if (filter_matrix.count > 0) { + context_set_array_of_arrays(&ctx, "engine_filters", filter_matrix.rows, + filter_matrix.count, + filter_matrix.field_counts); } + string_matrix_free(&filter_matrix); } if (page == 1) { @@ -673,25 +671,23 @@ int results_handler(UrlParams *params) { return 0; } - char ***infobox_matrix = NULL; - int *infobox_inner_counts = NULL; - int infobox_count = 0; + StringMatrix infobox_matrix; + string_matrix_init(&infobox_matrix); if (page == 1) { for (int i = 0; i < HANDLER_COUNT; i++) { if (infobox_data[i].success) { - infobox_count = - add_infobox_to_collection(&infobox_data[i].result, &infobox_matrix, - &infobox_inner_counts, infobox_count); + add_infobox_to_collection(&infobox_data[i].result, &infobox_matrix); } } } - if (infobox_count > 0) { - context_set_array_of_arrays(&ctx, "infoboxes", infobox_matrix, - infobox_count, infobox_inner_counts); - free_string_matrix(infobox_matrix, infobox_inner_counts, infobox_count); + if (infobox_matrix.count > 0) { + context_set_array_of_arrays(&ctx, "infoboxes", infobox_matrix.rows, + infobox_matrix.count, + infobox_matrix.field_counts); } + string_matrix_free(&infobox_matrix); int warning_count = 0; for (int i = 0; i < enabled_engine_count; i++) { @@ -700,26 +696,25 @@ int results_handler(UrlParams *params) { } if (warning_count > 0) { - char ***warning_matrix = NULL; - int *warning_inner_counts = NULL; - int warning_index = 0; + StringMatrix warning_matrix; + string_matrix_init(&warning_matrix); for (int i = 0; i < enabled_engine_count; i++) { const char *warning_message = warning_message_for_job(&jobs[i], locale); if (!warning_message) continue; - warning_index = add_warning_to_collection( - jobs[i].engine->name, warning_message, &warning_matrix, - &warning_inner_counts, warning_index); + add_warning_to_collection(jobs[i].engine->name, warning_message, + &warning_matrix); } - if (warning_index > 0) { - context_set_array_of_arrays(&ctx, "engine_warnings", warning_matrix, - warning_index, warning_inner_counts); + if (warning_matrix.count > 0) { + context_set_array_of_arrays(&ctx, "engine_warnings", warning_matrix.rows, + warning_matrix.count, + warning_matrix.field_counts); } - free_string_matrix(warning_matrix, warning_inner_counts, warning_index); + string_matrix_free(&warning_matrix); } int total_results = 0; |
