say: Don't prepend ampersand erroneously.

Some logic in say.c for determining if we need
to also add an ampersand for file seperation was faulty,
as non-successful files would increment the count, causing
a leading ampersand to be added improperly.

This is fixed, and a unit test that captures this regression
is also added.

ASTERISK-30248 #close

Change-Id: I02c1d3a11d82fe4ea8b462070cbd1effb5834d2b
(cherry picked from commit bf6194be45)
16.30
Naveen Albert 3 years ago committed by George Joseph
parent 5ffec8cc41
commit eb2acd9a68

@ -211,6 +211,15 @@ AST_TEST_DEFINE(test_SAYFILES_function)
res = AST_TEST_FAIL; res = AST_TEST_FAIL;
} }
/* + should be ignored and there should not be a leading & */
ast_str_set(&expr, 0, "${SAYFILES(+18005551212,digits)}");
ast_str_substitute_variables(&result, 0, NULL, ast_str_buffer(expr));
if (strcmp(ast_str_buffer(result), "digits/1&digits/8&digits/0&digits/0&digits/5&digits/5&digits/5&digits/1&digits/2&digits/1&digits/2") != 0) {
ast_test_status_update(test, "SAYFILES(+18005551212,digits) test failed ('%s')\n",
ast_str_buffer(result));
res = AST_TEST_FAIL;
}
ast_str_set(&expr, 0, "${SAYFILES(35,number)}"); ast_str_set(&expr, 0, "${SAYFILES(35,number)}");
ast_str_substitute_variables(&result, 0, NULL, ast_str_buffer(expr)); ast_str_substitute_variables(&result, 0, NULL, ast_str_buffer(expr));
if (strcmp(ast_str_buffer(result), "digits/30&digits/5") != 0) { if (strcmp(ast_str_buffer(result), "digits/30&digits/5") != 0) {

@ -160,7 +160,7 @@ struct ast_str* ast_get_character_str(const char *str, const char *lang, enum as
} }
if ((fn && ast_fileexists(fn, NULL, lang) > 0) || if ((fn && ast_fileexists(fn, NULL, lang) > 0) ||
(snprintf(asciibuf + 13, sizeof(asciibuf) - 13, "%d", str[num]) > 0 && ast_fileexists(asciibuf, NULL, lang) > 0 && (fn = asciibuf))) { (snprintf(asciibuf + 13, sizeof(asciibuf) - 13, "%d", str[num]) > 0 && ast_fileexists(asciibuf, NULL, lang) > 0 && (fn = asciibuf))) {
ast_str_append(&filenames, 0, (num == 0 ? "%s" : "&%s"), fn); ast_str_append(&filenames, 0, "%s%s", ast_str_strlen(filenames) ? "&" : "", fn);
} }
if (upper || lower) { if (upper || lower) {
continue; continue;
@ -282,7 +282,7 @@ struct ast_str* ast_get_phonetic_str(const char *str, const char *lang)
fn = fnbuf; fn = fnbuf;
} }
if (fn && ast_fileexists(fn, NULL, lang) > 0) { if (fn && ast_fileexists(fn, NULL, lang) > 0) {
ast_str_append(&filenames, 0, (num == 0 ? "%s" : "&%s"), fn); ast_str_append(&filenames, 0, "%s%s", ast_str_strlen(filenames) ? "&" : "", fn);
} }
num++; num++;
} }
@ -336,7 +336,7 @@ struct ast_str* ast_get_digit_str(const char *str, const char *lang)
break; break;
} }
if (fn && ast_fileexists(fn, NULL, lang) > 0) { if (fn && ast_fileexists(fn, NULL, lang) > 0) {
ast_str_append(&filenames, 0, (num == 0 ? "%s" : "&%s"), fn); ast_str_append(&filenames, 0, "%s%s", ast_str_strlen(filenames) ? "&" : "", fn);
} }
num++; num++;
} }

Loading…
Cancel
Save