@@ -374,10 +374,12 @@ private static boolean rubySprintfToBuffer(ByteList buf, CharSequence charFormat
374374 // MRI doesn't flag it as an error if width is given multiple
375375 // times as a number (but it does for *)
376376 number = 0 ;
377- for ( ; offset < length && isDigit (fchar = format [offset ]); offset ++) {
378- number = extendWidth (args , number , fchar );
377+ { // MRI: GETNUM macro
378+ for (; offset < length && isDigit (fchar = format [offset ]); offset ++) {
379+ number = extendWidth (args , number , fchar );
380+ }
381+ checkOffset (args , offset , length , ERR_MALFORMED_NUM );
379382 }
380- checkOffset (args ,offset ,length ,ERR_MALFORMED_NUM );
381383 if (fchar == '$' ) {
382384 if (arg != null ) {
383385 raiseArgumentError (args ,"value given twice - " + number + "$" );
@@ -434,10 +436,12 @@ private static boolean rubySprintfToBuffer(ByteList buf, CharSequence charFormat
434436 checkOffset (args ,++offset ,length ,ERR_MALFORMED_STAR_NUM );
435437 mark = offset ;
436438 number = 0 ;
437- for ( ; offset < length && isDigit (fchar = format [offset ]); offset ++) {
438- number = extendWidth (args ,number ,fchar );
439+ { // MRI: GETNUM macro
440+ for (; offset < length && isDigit (fchar = format [offset ]); offset ++) {
441+ number = extendWidth (args , number , fchar );
442+ }
443+ checkOffset (args , offset , length , ERR_MALFORMED_STAR_NUM );
439444 }
440- checkOffset (args ,offset ,length ,ERR_MALFORMED_STAR_NUM );
441445 if (fchar == '$' ) {
442446 precision = args .getNthInt (number );
443447 if (precision < 0 ) {
0 commit comments