@@ -9628,30 +9628,34 @@ while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0)
96289628 fprintf (stderr , "pcre2test: -S is not supported on this OS\n" );
96299629 exit (1 );
96309630#else
9631- int rc ;
9631+ int rc = 0 ;
96329632 uint32_t stack_size ;
9633- struct rlimit rlim ;
9634- if (U32OVERFLOW ( uli ))
9633+ struct rlimit rlim , rlim_old ;
9634+ if (uli > INT32_MAX / ( 1024 * 1024 ))
96359635 {
96369636 fprintf (stderr , "** Argument for -S is too big\n" );
96379637 exit (1 );
96389638 }
96399639 stack_size = (uint32_t )uli ;
9640- getrlimit (RLIMIT_STACK , & rlim );
9640+ getrlimit (RLIMIT_STACK , & rlim_old );
9641+ rlim = rlim_old ;
96419642 rlim .rlim_cur = stack_size * 1024 * 1024 ;
9642- if (rlim .rlim_cur > rlim .rlim_max )
9643+ if (rlim .rlim_max != RLIM_INFINITY && rlim . rlim_cur > rlim .rlim_max )
96439644 {
96449645 fprintf (stderr ,
96459646 "pcre2test: requested stack size %luMiB is greater than hard limit " ,
96469647 (unsigned long int )stack_size );
9647- if (rlim .rlim_max % (1024 * 1024 ) == 0 ) fprintf (stderr , "%luMiB\n" ,
9648- (unsigned long int )(rlim .rlim_max /(1024 * 1024 )));
9649- else if (rlim .rlim_max % 1024 == 0 ) fprintf (stderr , "%luKiB\n" ,
9650- (unsigned long int )(rlim .rlim_max /1024 ));
9651- else fprintf (stderr , "%lu bytes\n" , (unsigned long int )(rlim .rlim_max ));
9648+ if (rlim .rlim_max % (1024 * 1024 ) == 0 )
9649+ fprintf (stderr , "%luMiB\n" , (unsigned long )(rlim .rlim_max /(1024 * 1024 )));
9650+ else if (rlim .rlim_max % 1024 == 0 )
9651+ fprintf (stderr , "%luKiB\n" , (unsigned long )(rlim .rlim_max /1024 ));
9652+ else
9653+ fprintf (stderr , "%lu bytes\n" , (unsigned long )(rlim .rlim_max ));
96529654 exit (1 );
96539655 }
9654- rc = setrlimit (RLIMIT_STACK , & rlim );
9656+ if (rlim_old .rlim_cur != RLIM_INFINITY && rlim_old .rlim_cur <= INT32_MAX &&
9657+ rlim .rlim_cur > rlim_old .rlim_cur )
9658+ rc = setrlimit (RLIMIT_STACK , & rlim );
96559659 if (rc != 0 )
96569660 {
96579661 fprintf (stderr , "pcre2test: setting stack size %luMiB failed: %s\n" ,
0 commit comments