Buffer size safety.
Do not look for '\n' beyond valid data area. Obey buffer length (in case a METAR contained a line > 512byte).
This commit is contained in:
parent
48c6d3d89a
commit
662578dbe7
@ -296,7 +296,7 @@ SGSocket::readline( char *buf, int length )
|
||||
int i;
|
||||
for ( i = 0; i < save_len && save_buf[i] != '\n'; ++i )
|
||||
;
|
||||
if ( save_buf[i] == '\n' ) {
|
||||
if (( i < save_len ) && ( save_buf[i] == '\n' )) {
|
||||
result = i + 1;
|
||||
} else {
|
||||
// no end of line yet
|
||||
@ -305,9 +305,16 @@ SGSocket::readline( char *buf, int length )
|
||||
|
||||
// we found an end of line
|
||||
|
||||
// check buffer size
|
||||
int copy_length = result;
|
||||
if (copy_length >= length) {
|
||||
SG_LOG( SG_IO, SG_ALERT,
|
||||
"Alert: readline() has line exceeding the buffer size." );
|
||||
copy_length = length-1;
|
||||
}
|
||||
// copy to external buffer
|
||||
strncpy( buf, save_buf, result );
|
||||
buf[result] = '\0';
|
||||
strncpy( buf, save_buf, copy_length );
|
||||
buf[copy_length] = '\0';
|
||||
|
||||
// shift save buffer
|
||||
//memmove( save_buf+, save_buf+, ? );
|
||||
|
Loading…
Reference in New Issue
Block a user