summaryrefslogtreecommitdiffstats
path: root/string.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-24 14:01:41 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-24 14:01:41 +0000
commita351839e8fed92a303f1d5a35c6bfbb62b52ceb4 (patch)
tree5b2749704e49b60f05b2cda2ad3bb7ff48f680d4 /string.c
parent604b4986aefb2c59b579cce42f09751898e7bc61 (diff)
downloadruby-a351839e8fed92a303f1d5a35c6bfbb62b52ceb4.tar.gz
ruby-a351839e8fed92a303f1d5a35c6bfbb62b52ceb4.tar.xz
ruby-a351839e8fed92a303f1d5a35c6bfbb62b52ceb4.zip
* string.c (rb_str_rstrip_bang): raise exception when the encoding of
the string is dummy. * string.c (rb_str_rstrip_bang): remove nul characters even if the encoding of the string is not single byte optimizable. fixed [ruby-core:18844], reported by Michael Selig. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/string.c b/string.c
index a47485680..990694f24 100644
--- a/string.c
+++ b/string.c
@@ -5856,19 +5856,23 @@ rb_str_rstrip_bang(VALUE str)
char *s, *t, *e;
enc = STR_ENC_GET(str);
+ if (rb_enc_dummy_p(enc)) {
+ rb_raise(rb_eEncCompatError, "incompatible encoding with this operation: %s", rb_enc_name(enc));
+ }
s = RSTRING_PTR(str);
if (!s || RSTRING_LEN(str) == 0) return Qnil;
t = e = RSTRING_END(str);
+ /* remove trailing spaces or '\0's */
if (single_byte_optimizable(str)) {
- /* remove trailing spaces or '\0's */
while (s < t && (*(t-1) == '\0' || rb_enc_isspace(*(t-1), enc))) t--;
}
else {
char *tp;
while ((tp = rb_enc_prev_char(s, t, e, enc)) != NULL) {
- if (!rb_enc_isspace(rb_enc_codepoint(tp, e, enc), enc)) break;
+ unsigned int c = rb_enc_codepoint(tp, e, enc);
+ if (c && !rb_enc_isspace(c, enc)) break;
t = tp;
}
}