fix(ai): guard NULL search_str and update tests for new cycling behavior
Some checks failed
CI Code / Check spelling (pull_request) Successful in 21s
CI Code / Check coding style (pull_request) Successful in 37s
CI Code / Linux (debian) (pull_request) Failing after 2m56s
CI Code / Linux (ubuntu) (pull_request) Failing after 3m7s
CI Code / Code Coverage (pull_request) Successful in 2m55s
CI Code / Linux (arch) (pull_request) Failing after 3m45s

Update ai_providers_find() to handle NULL search_str safely by treating it
as an empty string, preventing a segfault in strdup() within autocomplete_complete().

Rename test_ai_providers_find_case_sensitive to test_ai_providers_find_case_insensitive
to reflect the new case-insensitive matching contract. Update all affected tests to
expect cycling behavior (NULL/empty returns first provider) and use auto_gchar for
automatic memory management.

Use `gchar` instead of `char` in ai_providers_find for consistency
This commit is contained in:
2026-05-01 13:08:28 +00:00
parent 4913a3d5a4
commit 00f11eb704
5 changed files with 32 additions and 32 deletions

View File

@@ -360,7 +360,7 @@ ai_list_providers(void)
/* Stateful provider name finder with case-sensitive matching.
* Maintains position in sorted list for deterministic tab-completion cycling.
* The autocomplete is kept in sync via ai_add_provider/ai_remove_provider. */
char*
gchar*
ai_providers_find(const char* const search_str, gboolean previous, void* context)
{
/* Initialize autocomplete on first use */
@@ -368,8 +368,11 @@ ai_providers_find(const char* const search_str, gboolean previous, void* context
providers_ac = autocomplete_new();
}
/* NULL search_str is treated as empty string for cycling */
const char* effective_search = (search_str != NULL) ? search_str : "";
/* Use stateful autocomplete */
return autocomplete_complete(providers_ac, search_str, FALSE, previous);
return autocomplete_complete(providers_ac, effective_search, FALSE, previous);
}
gchar*

View File

@@ -109,7 +109,7 @@ GList* ai_list_providers(void);
* @param context Unused
* @return Provider name, or NULL if not found
*/
char* ai_providers_find(const char* const search_str, gboolean previous, void* context);
gchar* ai_providers_find(const char* const search_str, gboolean previous, void* context);
/**
* Get the API key for a provider.