From d88282af407fc3654826c29e0fe1c717143c93f0 Mon Sep 17 00:00:00 2001
From: Matthew Jordan <mjordan@digium.com>
Date: Fri, 31 Oct 2014 03:26:28 +0000
Subject: [PATCH] channels/sip/reqresp_parser: Fix unit tests for r426594

When r426594 was made, it did not take into account a unit test that verified
that the function properly populated the unsupported buffer. The function
would previously memset the buffer if it detected it had any contents; since
this function can now be called iteratively on successive headers, the unit
tests would now fail. This patch updates the unit tests to reset the buffer
themselves between successive calls, and updates the documentation of the
function to note that this is now required.
........

Merged revisions 426858 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 426860 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 426863 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 426865 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/sip/include/reqresp_parser.h | 5 +++++
 channels/sip/reqresp_parser.c         | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/channels/sip/include/reqresp_parser.h b/channels/sip/include/reqresp_parser.h
index 7f9c8f6d91..2543329dd1 100644
--- a/channels/sip/include/reqresp_parser.h
+++ b/channels/sip/include/reqresp_parser.h
@@ -176,6 +176,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 aa568a0e90..e5c1ff2bca 100644
--- a/channels/sip/reqresp_parser.c
+++ b/channels/sip/reqresp_parser.c
@@ -1698,7 +1698,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;
@@ -1858,6 +1857,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)) {
-- 
GitLab