@ -191,12 +191,14 @@ EXTERN int ooQ931Decode
/* Extract calling party number TODO:Give respect to presentation and
screening indicators ; - ) */
if ( ie - > discriminator = = Q931CallingPartyNumberIE )
{
OOTRACEDBGB1 ( " CallingPartyNumber IE = { \n " ) ;
if ( ie - > length < OO_MAX_NUMBER_LENGTH )
{
int numoffset = 1 ;
OOTRACEDBGB1 ( " CallingPartyNumber IE = { \n " ) ;
if ( ! ( 0x80 & ie - > data [ 0 ] ) ) numoffset = 2 ;
if ( ( ie - > length > = numoffset ) & &
( ie - > length < OO_MAX_NUMBER_LENGTH ) )
{
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 " ) ;