Merged revisions 108086 via svnmerge from
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 12 Mar 2008 20:27:01 +0000 (20:27 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 12 Mar 2008 20:27:01 +0000 (20:27 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r108086 | kpfleming | 2008-03-12 14:16:07 -0500 (Wed, 12 Mar 2008) | 6 lines

if we receive an INVITE with a Content-Length that is not a valid number, or is zero, then don't process the rest of the message body looking for an SDP

closes issue #11475
Reported by: andrebarbosa

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@108191 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index e5ac3b2..16bb347 100644 (file)
@@ -6150,6 +6150,7 @@ static void parse_request(struct sip_request *req)
 static int find_sdp(struct sip_request *req)
 {
        const char *content_type;
+       const char *content_length;
        const char *search;
        char *boundary;
        unsigned int x;
@@ -6157,6 +6158,20 @@ static int find_sdp(struct sip_request *req)
        int found_application_sdp = FALSE;
        int found_end_of_headers = FALSE;
 
+       content_length = get_header(req, "Content-Length");
+
+       if (!ast_strlen_zero(content_length)) {
+               if (sscanf(content_length, "%ud", &x) != 1) {
+                       ast_log(LOG_WARNING, "Invalid Content-Length: %s\n", content_length);
+                       return 0;
+               }
+
+               /* Content-Length of zero means there can't possibly be an
+                  SDP here, even if the Content-Type says there is */
+               if (x == 0)
+                       return 0;
+       }
+
        content_type = get_header(req, "Content-Type");
 
        /* if the body contains only SDP, this is easy */