diff --git a/channels/sip/include/reqresp_parser.h b/channels/sip/include/reqresp_parser.h index 02b046bc72f7da7e0094e7b9c73b0bbf6f6b0c85..8fb803592c5110878841e2cb85d5cf40fa4d08b2 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 007ef6291613d16aeb4d70e41e92babb05562db4..42bb04deb56510d08dcbfc8305f31a9788bbba5e 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)) {