summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_sprintf.rb2
-rw-r--r--vsnprintf.c1
3 files changed, 8 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 00491e7050..14b652b4ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Oct 19 19:30:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): clear ALT flag for %a.
+ [ruby-core:32841] [ruby-core:32848]
+
Tue Oct 19 12:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vsnprintf.c (BSD_vfprintf): fix over-count of field size.
diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb
index 62def514f0..3919f70f7d 100644
--- a/test/ruby/test_sprintf.rb
+++ b/test/ruby/test_sprintf.rb
@@ -221,8 +221,10 @@ class TestSprintf < Test::Unit::TestCase
assert_equal("-0x1.08p+0", sprintf("%010a", -1.03125), bug3962)
bug3964 = '[ruby-core:32848]'
+ assert_equal("0x000000000000000p+0", sprintf("%020a", 0), bug3962)
assert_equal("0x000000000000001p+0", sprintf("%020a", 1), bug3964)
assert_equal("-0x00000000000001p+0", sprintf("%020a", -1), bug3964)
+ assert_equal("0x000000000000000p+0", sprintf("%#020a", 0), bug3962)
end
BSIZ = 120
diff --git a/vsnprintf.c b/vsnprintf.c
index c0853389c6..1f4172efb8 100644
--- a/vsnprintf.c
+++ b/vsnprintf.c
@@ -784,6 +784,7 @@ reswitch: switch (ch) {
#ifdef FLOATING_POINT
case 'a':
case 'A':
+ flags &= ~ALT;
if (prec >= 0)
prec++;
goto fp_begin;