File tree Expand file tree Collapse file tree 1 file changed +12
-3
lines changed
erts/emulator/drivers/common Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Original file line number Diff line number Diff line change @@ -14696,8 +14696,17 @@ static int packet_inet_input(udp_descriptor* udesc, HANDLE event)
14696
14696
ASSERT (IS_SCTP (desc ));
14697
14697
bufsz = udesc -> i_ptr - udesc -> i_buf -> orig_bytes ;
14698
14698
if (udesc -> i_bufsz - bufsz < desc -> bufsz ) { /* Headroom */
14699
- bufsz = udesc -> i_bufsz + desc -> bufsz ;
14700
- if ((tmp = realloc_buffer (udesc -> i_buf , bufsz )) == NULL ) {
14699
+ int new_bufsz ;
14700
+ new_bufsz = INT_MAX - desc -> bufsz ; /* Headroom for + */
14701
+ if (new_bufsz < udesc -> i_bufsz ) /* Would overflow? */
14702
+ if (new_bufsz < bufsz ) /* Would also overflow? */
14703
+ goto bufsz_overflow ;
14704
+ else
14705
+ new_bufsz = desc -> bufsz + bufsz ;
14706
+ else
14707
+ new_bufsz = desc -> bufsz + udesc -> i_bufsz ;
14708
+ if ((tmp = realloc_buffer (udesc -> i_buf , new_bufsz )) == NULL ) {
14709
+ bufsz_overflow :
14701
14710
release_buffer (udesc -> i_buf );
14702
14711
udesc -> i_buf = NULL ;
14703
14712
return packet_error (udesc , ENOMEM );
@@ -14706,7 +14715,7 @@ static int packet_inet_input(udp_descriptor* udesc, HANDLE event)
14706
14715
tmp -> orig_bytes +
14707
14716
(udesc -> i_ptr - udesc -> i_buf -> orig_bytes );
14708
14717
udesc -> i_buf = tmp ;
14709
- udesc -> i_bufsz = bufsz ;
14718
+ udesc -> i_bufsz = new_bufsz ;
14710
14719
}
14711
14720
have_fragment = TRUE;
14712
14721
} else
You can’t perform that action at this time.
0 commit comments