summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--sprintf.c8
2 files changed, 9 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ab7cc04fe0..c56458ef28 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,10 @@ Fri Aug 4 13:56:51 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
* pack.c (pack_pack): check argument overrun for 'P'. based on a
patch by rucila <rucila at yahoo.cojp>. fixed: [ruby-dev:29182]
+Fri Aug 4 02:42:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): a bug in %c type check.
+
Fri Aug 4 01:28:19 2006 Tanaka Akira <akr@fsij.org>
* io.c (io_reopen): STDERR.reopen(File.open("/dev/null", "w")) should
diff --git a/sprintf.c b/sprintf.c
index 953ce5054c..4c5e56843c 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -399,13 +399,15 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
case 'c':
{
VALUE val = GETARG();
+ VALUE tmp;
char c;
- if (rb_check_string_type(val)) {
- if (RSTRING(val)->len != 1) {
+ tmp = rb_check_string_type(val);
+ if (!NIL_P(tmp)) {
+ if (RSTRING(tmp)->len != 1) {
rb_raise(rb_eArgError, "%%c requires a character");
}
- c = RSTRING(val)->ptr[0];
+ c = RSTRING(tmp)->ptr[0];
}
else {
c = NUM2INT(val) & 0xff;