[前][次][番号順一覧][スレッド一覧]

ruby-changes:72987

From: Nobuyoshi <ko1@a...>
Date: Sat, 20 Aug 2022 10:06:33 +0900 (JST)
Subject: [ruby-changes:72987] d2483393cb (master): [Bug #18956] Negative codepoints are invalid characters

https://git.ruby-lang.org/ruby.git/commit/?id=d2483393cb

From d2483393cbcb4dcfa0000fa8166bb7fa7ed9f7b4 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Sat, 20 Aug 2022 01:43:04 +0900
Subject: [Bug #18956] Negative codepoints are invalid characters

---
 sprintf.c                 | 4 ++--
 test/ruby/test_sprintf.rb | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/sprintf.c b/sprintf.c
index 22edf398fe..f7ebe82e2c 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -447,8 +447,8 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/sprintf.c#L447
                     goto format_s1;
                 }
                 else {
-                    c = NUM2INT(val);
-                    n = rb_enc_codelen(c, enc);
+                    n = NUM2INT(val);
+                    if (n >= 0) n = rb_enc_codelen((c = n), enc);
                 }
                 if (n <= 0) {
                     rb_raise(rb_eArgError, "invalid character");
diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb
index 618e67264a..803399fdb3 100644
--- a/test/ruby/test_sprintf.rb
+++ b/test/ruby/test_sprintf.rb
@@ -368,6 +368,7 @@ class TestSprintf < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_sprintf.rb#L368
     assert_equal(" " * (BSIZ - 1) + "a", sprintf(" " * (BSIZ - 1) + "%-1c", ?a))
     assert_equal(" " * BSIZ + "a", sprintf("%#{ BSIZ + 1 }c", ?a))
     assert_equal("a" + " " * BSIZ, sprintf("%-#{ BSIZ + 1 }c", ?a))
+    assert_raise(ArgumentError) { sprintf("%c", -1) }
   end
 
   def test_string
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]