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

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