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)) {