diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-24 05:22:51 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-24 05:22:51 +0000 |
commit | 83d9e9f42e1f704dd5a412b32d9264403d0b488a (patch) | |
tree | b9441132423cc7dab5e7d859cbadd513b2985d3c /string.c | |
parent | 4b8e14c978bf1300b6528430c28aab21865a21f4 (diff) | |
download | ruby-83d9e9f42e1f704dd5a412b32d9264403d0b488a.tar.gz |
* string.c (rb_str_inspect): increment by rb_enc_mbminlen(enc) for
broken byte sequence. [ruby-core:27748]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -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); |