From edf54951be885b7e72161722f2e932fcf01f1225 Mon Sep 17 00:00:00 2001 From: "Joshua C. Colp" Date: Wed, 31 Jan 2024 10:03:28 -0400 Subject: [PATCH] utils: Make behavior of ast_strsep* match strsep. Given the scenario of passing an empty string to the ast_strsep functions the functions would return NULL instead of an empty string. This is counter to how strsep itself works. This change alters the behavior of the functions to match that of strsep. Fixes: #565 --- include/asterisk/strings.h | 4 ++-- main/utils.c | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index f8ad4140d8..10eb011463 100644 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -271,7 +271,7 @@ enum ast_strsep_flags { AST_STRSEP_UNESCAPE unescapes '\' sequences. AST_STRSEP_ALL does all of the above processing. \return The next token or NULL if done or if there are more than 8 levels of - nested quotes. + nested quotes. If provided an empty string, will return the empty string. This function acts like strsep with three exceptions... The separator is a single character instead of a string. @@ -323,7 +323,7 @@ char *ast_strsep(char **s, const char sep, uint32_t flags); AST_STRSEP_UNESCAPE unescapes '\' sequences. AST_STRSEP_ALL does all of the above processing. \return The next token or NULL if done or if there are more than 8 levels of - nested quotes. + nested quotes. If provided an empty string, will return the empty string. */ char *ast_strsep_quoted(char **s, const char sep, const char quote, uint32_t flags); diff --git a/main/utils.c b/main/utils.c index b4d79867c9..80282308d5 100644 --- a/main/utils.c +++ b/main/utils.c @@ -1841,7 +1841,8 @@ char *ast_strsep(char **iss, const char sep, uint32_t flags) char stack[8]; if (ast_strlen_zero(st)) { - return NULL; + *iss = NULL; + return st; } memset(stack, 0, sizeof(stack)); @@ -1905,7 +1906,8 @@ char *ast_strsep_quoted(char **iss, const char sep, const char quote, uint32_t f const char qstr[] = { quote }; if (ast_strlen_zero(st)) { - return NULL; + *iss = NULL; + return st; } memset(stack, 0, sizeof(stack));