summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--string.c11
2 files changed, 10 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 87f22ba702..5e58c5a597 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,8 @@
-Sun Jan 24 13:55:54 2010 Tanaka Akira <akr@fsij.org>
+Sun Jan 24 14:21:48 2010 Tanaka Akira <akr@fsij.org>
* string.c (rb_enc_strlen_cr): increment by rb_enc_mbminlen(enc) for
broken byte sequence. [ruby-core:27748]
+ (rb_str_inspect): ditto.
Sun Jan 24 05:18:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
diff --git a/string.c b/string.c
index 6addc621ee..f04802f3f7 100644
--- a/string.c
+++ b/string.c
@@ -4099,9 +4099,14 @@ rb_str_inspect(VALUE str)
n = rb_enc_precise_mbclen(p, pend, enc);
if (!MBCLEN_CHARFOUND_P(n)) {
if (p > prev) str_buf_cat(result, prev, p - prev);
- snprintf(buf, CHAR_ESC_LEN, "\\x%02X", *p & 0377);
- str_buf_cat(result, buf, strlen(buf));
- prev = ++p;
+ n = rb_enc_mbminlen(enc);
+ if (pend < p + n)
+ n = pend - p;
+ while (n--) {
+ snprintf(buf, CHAR_ESC_LEN, "\\x%02X", *p & 0377);
+ str_buf_cat(result, buf, strlen(buf));
+ prev = ++p;
+ }
continue;
}
n = MBCLEN_CHARFOUND_LEN(n);