@@ -280,7 +280,7 @@ sip_validate_packet(packet_t *packet)
280
280
uint32_t plen = packet_payloadlen (packet );
281
281
u_char payload [MAX_SIP_PAYLOAD ];
282
282
regmatch_t pmatch [4 ];
283
- char cl_header [10 ];
283
+ char cl_header [MAX_CONTENT_LENGTH_SIZE ];
284
284
int content_len ;
285
285
int bodylen ;
286
286
@@ -307,7 +307,15 @@ sip_validate_packet(packet_t *packet)
307
307
return VALIDATE_PARTIAL_SIP ;
308
308
}
309
309
310
- strncpy (cl_header , (const char * )payload + pmatch [2 ].rm_so , (int )pmatch [2 ].rm_eo - pmatch [2 ].rm_so );
310
+ // Ensure the copy length does not exceed MAX_CONTENT_LENGTH_SIZE - 1
311
+ int cl_match_len = pmatch [2 ].rm_eo - pmatch [2 ].rm_so ;
312
+ if (cl_match_len > MAX_CONTENT_LENGTH_SIZE - 1 ) {
313
+ cl_match_len = MAX_CONTENT_LENGTH_SIZE - 1 ;
314
+ }
315
+
316
+ strncpy (cl_header , (const char * )payload + pmatch [2 ].rm_so , cl_match_len );
317
+ cl_header [cl_match_len ] = '\0' ; // Ensuring null termination
318
+
311
319
content_len = atoi (cl_header );
312
320
313
321
// Check if we have Body separator field
772
780
sip_parse_extra_headers (sip_msg_t * msg , const u_char * payload )
773
781
{
774
782
regmatch_t pmatch [4 ];
775
- char warning [10 ];
783
+ char warning [MAX_WARNING_SIZE ];
776
784
777
785
// Reason text
778
786
if (regexec (& calls .reg_reason , (const char * )payload , 2 , pmatch , 0 ) == 0 ) {
@@ -782,8 +790,16 @@ sip_parse_extra_headers(sip_msg_t *msg, const u_char *payload)
782
790
783
791
// Warning code
784
792
if (regexec (& calls .reg_warning , (const char * )payload , 2 , pmatch , 0 ) == 0 ) {
785
- strncpy (warning , (const char * )payload + pmatch [1 ].rm_so , (int )pmatch [1 ].rm_eo - pmatch [1 ].rm_so );
786
- msg -> call -> warning = atoi (warning );
793
+
794
+ // Ensure the copy length does not exceed MAX_WARNING_SIZE - 1
795
+ int warning_match_len = pmatch [1 ].rm_eo - pmatch [1 ].rm_so ;
796
+ if (warning_match_len > MAX_WARNING_SIZE - 1 ) {
797
+ warning_match_len = MAX_WARNING_SIZE - 1 ;
798
+ }
799
+ strncpy (warning , (const char * )payload + pmatch [1 ].rm_so , warning_match_len );
800
+ warning [warning_match_len ] = '\0' ; // Ensuring null termination
801
+
802
+ msg -> call -> warning = atoi (warning );
787
803
}
788
804
}
789
805
0 commit comments