swap recursion for iteration in skip_whitespace

and avoid a stack overflow, see

https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19701
This commit is contained in:
John Cupitt 2019-12-26 11:22:33 +00:00
parent f2f2ab200d
commit e43cba116a

View File

@ -498,18 +498,22 @@ vips_bufis_get_non_whitespace( VipsBufis *bufis )
int
vips_bufis_skip_whitespace( VipsBufis *bufis )
{
int ch;
int ch;
do {
ch = VIPS_BUFIS_GETC( bufis );
/* # skip comments too.
*/
if( ch == '#' ) {
if( !vips_bufis_get_line( bufis ) )
return( -1 );
ch = VIPS_BUFIS_GETC( bufis );
}
} while( isspace( ch ) );
while( isspace( ch = VIPS_BUFIS_GETC( bufis ) ) )
;
VIPS_BUFIS_UNGETC( bufis );
/* # skip comments too.
*/
if( ch == '#' &&
(!vips_bufis_get_line( bufis ) ||
vips_bufis_skip_whitespace( bufis )) )
return( -1 );
return( 0 );
}