diff --git a/channels/sip/include/reqresp_parser.h b/channels/sip/include/reqresp_parser.h index 02b046bc72..8fb803592c 100644 --- a/channels/sip/include/reqresp_parser.h +++ b/channels/sip/include/reqresp_parser.h @@ -152,6 +152,11 @@ void sip_request_parser_unregister_tests(void); * \param option list * \param unsupported out buffer (optional) * \param unsupported out buffer length (optional) + * + * \note Because this function can be called multiple times, it will append + * whatever options are specified in \c options to \c unsupported. Callers + * of this function should make sure the unsupported buffer is clear before + * calling this function. */ unsigned int parse_sip_options(const char *options, char *unsupported, size_t unsupported_len); diff --git a/channels/sip/reqresp_parser.c b/channels/sip/reqresp_parser.c index 007ef62916..42bb04deb5 100644 --- a/channels/sip/reqresp_parser.c +++ b/channels/sip/reqresp_parser.c @@ -1601,7 +1601,6 @@ unsigned int parse_sip_options(const char *options, char *unsupported, size_t un temp = ast_strdupa(options); ast_debug(3, "Begin: parsing SIP \"Supported: %s\"\n", options); - for (next = temp; next; next = sep) { found = FALSE; supported = FALSE; @@ -1761,6 +1760,7 @@ AST_TEST_DEFINE(sip_parse_options_test) /* Test with unsupported char buffer */ AST_LIST_TRAVERSE(&testdatalist, testdataptr, list) { + memset(unsupported, 0, sizeof(unsupported)); option_profile = parse_sip_options(testdataptr->input_options, unsupported, ARRAY_LEN(unsupported)); if (option_profile != testdataptr->expected_profile || strcmp(unsupported, testdataptr->expected_unsupported)) {