mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@19529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ad50e0edb9
commit
00e9e27b69
2 changed files with 16 additions and 3 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,6 +1,15 @@
|
||||||
|
Wed Sep 24 22:58:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
Wed Sep 24 19:01:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
Wed Sep 24 19:01:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* string.c (rb_str_strip_bang): workaround for VC++8 x64.
|
* string.c (rb_str_rstrip_bang): workaround for VC++8 x64.
|
||||||
|
|
||||||
Wed Sep 24 17:44:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Wed Sep 24 17:44:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
|
8
string.c
8
string.c
|
@ -5856,19 +5856,23 @@ rb_str_rstrip_bang(VALUE str)
|
||||||
char *s, *t, *e;
|
char *s, *t, *e;
|
||||||
|
|
||||||
enc = STR_ENC_GET(str);
|
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);
|
s = RSTRING_PTR(str);
|
||||||
if (!s || RSTRING_LEN(str) == 0) return Qnil;
|
if (!s || RSTRING_LEN(str) == 0) return Qnil;
|
||||||
t = e = RSTRING_END(str);
|
t = e = RSTRING_END(str);
|
||||||
|
|
||||||
|
/* remove trailing spaces or '\0's */
|
||||||
if (single_byte_optimizable(str)) {
|
if (single_byte_optimizable(str)) {
|
||||||
/* remove trailing spaces or '\0's */
|
|
||||||
while (s < t && (*(t-1) == '\0' || rb_enc_isspace(*(t-1), enc))) t--;
|
while (s < t && (*(t-1) == '\0' || rb_enc_isspace(*(t-1), enc))) t--;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *tp;
|
char *tp;
|
||||||
|
|
||||||
while ((tp = rb_enc_prev_char(s, t, e, enc)) != NULL) {
|
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;
|
t = tp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue