Issue #7990 has been updated by drbrain (Eric Hodel).

Status changed from Open to Rejected

=begin
A number with a leading 0 is considered octal, see ((%ri ruby:syntax/literals%)), so this is expected behavior.

PS: This is tracker is for backports of fixed issues. You should file new issues here: https://bugs.ruby-lang.org/projects/ruby-trunk/issues/new
=end
----------------------------------------
Backport #7990: printf and sprintf integer conversion failure of string for "08" and "09"
https://bugs.ruby-lang.org/issues/7990#change-37202

Author: daves (Dave Singer)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 


Happens consistently. Converting var to int explicitly first or removing the leading "0" allows it to work fine. Example:

2.0.0-p0 :004 > (0..10).each {|x|
2.0.0-p0 :005 >     x=x.to_s
2.0.0-p0 :006?>   printf("%s,%02d;", x, x)
2.0.0-p0 :007?>   }
0,00;1,01;2,02;3,03;4,04;5,05;6,06;7,07;8,08;9,09;10,10; => 0..10
2.0.0-p0 :008 > (0..10).each {|x|
2.0.0-p0 :009 >     x = sprintf("%02d", x)
2.0.0-p0 :010?>   printf("%s,%02d;", x, x)
2.0.0-p0 :011?>   }
00,00;01,01;02,02;03,03;04,04;05,05;06,06;07,07;ArgumentError: invalid value for Integer(): "08"
        from (irb):10:in `printf'
        from (irb):10:in `block in irb_binding'
        from (irb):8:in `each'
        from (irb):8
        from /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
2.0.0-p0 :012 > printf("%02d", "09")
ArgumentError: invalid value for Integer(): "09"
        from (irb):12:in `printf'
        from (irb):12
        from /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

Running on x64 centos 6.3
#rvm list

rvm rubies

=* ruby-2.0.0-p0 [ x86_64 ]


-- 
http://bugs.ruby-lang.org/