From eb1d7ab53cf8ba8c42432cdedd5943102efe5101 Mon Sep 17 00:00:00 2001 From: Mike Bradeen Date: Mon, 6 Jun 2022 17:11:30 -0600 Subject: [PATCH] ooh323c: not checking for IE minimum length When decoding q.931 encoded calling/called number now checking for length being less than minimum required. ASTERISK-30103 Change-Id: I3dcfce0f35eca258dc450f87c92d4d7af402c2e7 --- addons/ooh323c/src/ooq931.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/ooh323c/src/ooq931.c b/addons/ooh323c/src/ooq931.c index fe8b06ebee..b7bcba8469 100644 --- a/addons/ooh323c/src/ooq931.c +++ b/addons/ooh323c/src/ooq931.c @@ -192,11 +192,13 @@ EXTERN int ooQ931Decode screening indicators ;-) */ if(ie->discriminator == Q931CallingPartyNumberIE) { + int numoffset=1; OOTRACEDBGB1(" CallingPartyNumber IE = {\n"); - if(ie->length < OO_MAX_NUMBER_LENGTH) + if(!(0x80 & ie->data[0])) numoffset = 2; + + if( (ie->length >= numoffset) && + (ie->length < OO_MAX_NUMBER_LENGTH) ) { - int numoffset=1; - if(!(0x80 & ie->data[0])) numoffset = 2; memcpy(number, ie->data+numoffset,ie->length-numoffset); number[ie->length-numoffset]='\0'; OOTRACEDBGB2(" %s\n", number); @@ -204,7 +206,7 @@ EXTERN int ooQ931Decode ooCallSetCallingPartyNumber(call, number); } else{ - OOTRACEERR3("Error:Calling party number too long. (%s, %s)\n", + OOTRACEERR3("Error:Calling party number outside range. (%s, %s)\n", call->callType, call->callToken); } OOTRACEDBGB1(" }\n"); @@ -214,7 +216,8 @@ EXTERN int ooQ931Decode if(ie->discriminator == Q931CalledPartyNumberIE) { OOTRACEDBGB1(" CalledPartyNumber IE = {\n"); - if(ie->length < OO_MAX_NUMBER_LENGTH) + if( (ie->length >= 1) && + (ie->length < OO_MAX_NUMBER_LENGTH) ) { memcpy(number, ie->data+1,ie->length-1); number[ie->length-1]='\0'; @@ -223,7 +226,7 @@ EXTERN int ooQ931Decode ooCallSetCalledPartyNumber(call, number); } else{ - OOTRACEERR3("Error:Calling party number too long. (%s, %s)\n", + OOTRACEERR3("Error:Calling party number outside range. (%s, %s)\n", call->callType, call->callToken); } OOTRACEDBGB1(" }\n");