Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > sprintf bug in 1.9.0?

Reply
Thread Tools

sprintf bug in 1.9.0?

 
 
Mark Hubbart
Guest
Posts: n/a
 
      02-16-2004
I just compiled the latest release of Ruby 1.9.0, and I'm getting
unexpected behavior from it...

mark@imac% /usr/local/bin/ruby -e'puts sprintf("%08b",0),RUBY_VERSION'
11111110
1.9.0
mark@imac% /usr/bin/ruby -e'puts sprintf("%08b",0),RUBY_VERSION'
00000000
1.6.8

it looks like sprintf, when you ask it to pad binary values with zeros,
is instead padding with ones! It doesn't seem t have a problem with
hex, just binary.

-Mark



 
Reply With Quote
 
 
 
 
nobu.nokada@softhome.net
Guest
Posts: n/a
 
      02-16-2004
Hi,

At Mon, 16 Feb 2004 19:49:36 +0900,
Mark Hubbart wrote in [ruby-talk:92961]:
> I just compiled the latest release of Ruby 1.9.0, and I'm getting
> unexpected behavior from it...
>
> mark@imac% /usr/local/bin/ruby -e'puts sprintf("%08b",0),RUBY_VERSION'
> 11111110
> 1.9.0
> mark@imac% /usr/bin/ruby -e'puts sprintf("%08b",0),RUBY_VERSION'
> 00000000
> 1.6.8


What's your platform?

$ ruby -v -e'puts sprintf("%08b",0),RUBY_VERSION'
ruby 1.9.0 (2004-02-15) [i686-linux]
00000000
1.9.0

--
Nobu Nakada


 
Reply With Quote
 
 
 
 
ts
Guest
Posts: n/a
 
      02-16-2004
>>>>> "n" == nobu nokada <(E-Mail Removed)> writes:

n> $ ruby -v -e'puts sprintf("%08b",0),RUBY_VERSION'

moulon% ruby -ve 'puts sprintf("%08b",0),RUBY_VERSION'
ruby 1.8.1 (2003-12-25) [sparc-solaris2.7]
11111110
1.8.1
moulon%


Guy Decoux


 
Reply With Quote
 
Mark Hubbart
Guest
Posts: n/a
 
      02-16-2004
> What's your platform?

Guess I should have mentioned that Again, but with full
version/release/platform tag:

mark@imac% /usr/bin/ruby -ve 'puts sprintf("%08b",0)'
ruby 1.6.8 (2002-12-24) [powerpc-darwin7.0]
00000000
mark@imac% /usr/local/bin/ruby -ve 'puts sprintf("%08b",0)'
ruby 1.9.0 (2004-02-14) [powerpc-darwin]
11111110




 
Reply With Quote
 
Mark Hubbart
Guest
Posts: n/a
 
      02-16-2004

On Feb 16, 2004, at 3:12 AM, ts wrote:

>>>>>> "n" == nobu nokada <(E-Mail Removed)> writes:

>
> n> $ ruby -v -e'puts sprintf("%08b",0),RUBY_VERSION'
>
> moulon% ruby -ve 'puts sprintf("%08b",0),RUBY_VERSION'
> ruby 1.8.1 (2003-12-25) [sparc-solaris2.7]
> 11111110
> 1.8.1
> moulon%
>
>
> Guy Decoux
>
>

Hmmmm... I hadn't thought to check 1.8, but I had it hanging around,
too, so:
mark@imac% /usr/local-old/bin/ruby -ve 'puts sprintf("%08b",0)'
ruby 1.8.0 (2003-08-04) [powerpc-darwin]
11111110

there we are! I hadn't noticed that bug before, but then I guess I
don't convert to binary strings very often...



 
Reply With Quote
 
ts
Guest
Posts: n/a
 
      02-16-2004
>>>>> "t" == ts <(E-Mail Removed)> writes:

t> moulon% ruby -ve 'puts sprintf("%08b",0),RUBY_VERSION'
t> ruby 1.8.1 (2003-12-25) [sparc-solaris2.7]

Not really sure (the problem is on line 566 in sprintf.c)

if (bignum && !RBIGNUM(val)->sign)
c = sign_bits(base, p);


moulon% diff -u sprintf.c~ sprintf.c
--- sprintf.c~ Thu Jul 3 13:00:18 2003
+++ sprintf.c Mon Feb 16 13:40:08 2004
@@ -345,6 +345,7 @@
long v = 0;
int base, bignum = 0;
int len, pos;
+ VALUE tmp;

switch (*p) {
case 'd':
@@ -472,8 +473,8 @@
}

if (sign) {
- val = rb_big2str(val, base);
- s = RSTRING(val)->ptr;
+ tmp = rb_big2str(val, base);
+ s = RSTRING(tmp)->ptr;
if (s[0] == '-') {
s++;
sc = '-';
@@ -493,8 +494,8 @@
val = rb_big_clone(val);
rb_big_2comp(val);
}
- val = rb_big2str(val, base);
- s = RSTRING(val)->ptr;
+ tmp = rb_big2str(val, base);
+ s = RSTRING(tmp)->ptr;
if (*s == '-') {
if (base == 10) {
rb_warning("negative number for %%u specifier");
@@ -502,8 +503,8 @@
}
else {
remove_sign_bits(++s, base);
- val = rb_str_new(0, 3+strlen(s));
- t = RSTRING(val)->ptr;
+ tmp = rb_str_new(0, 3+strlen(s));
+ t = RSTRING(tmp)->ptr;
if (!(flags&FPREC)) {
strcpy(t, "..");
t += 2;
@@ -520,7 +521,7 @@
bignum = 2;
}
}
- s = RSTRING(val)->ptr;
+ s = RSTRING(tmp)->ptr;

format_integer:
pos = -1;
moulon%


Guy Decoux


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
sprintf bug? Daniel DeLorme Ruby 1 02-01-2008 09:08 AM
sprintf bug (?) Peter Szinek Ruby 8 11-14-2006 01:43 AM
Bug in sprintf? Wes Gamble Ruby 23 08-20-2006 04:38 AM
Bug in ruby printf/sprintf paul.dlug@gmail.com Ruby 4 07-29-2006 09:40 AM
Sprintf bug jwesley Ruby 8 11-12-2005 02:10 AM



Advertisments