ruby-changes:15439
From: nobu <ko1@a...>
Date: Wed, 14 Apr 2010 15:58:33 +0900 (JST)
Subject: [ruby-changes:15439] Ruby:r27337 (trunk, ruby_1_8): * string.c (rb_string_value_cstr): make NUL terminated if it is
nobu 2010-04-14 15:58:13 +0900 (Wed, 14 Apr 2010) New Revision: 27337 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27337 Log: * string.c (rb_string_value_cstr): make NUL terminated if it is not done. Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/string.c trunk/ChangeLog trunk/string.c Index: ChangeLog =================================================================== --- ChangeLog (revision 27336) +++ ChangeLog (revision 27337) @@ -1,3 +1,8 @@ +Wed Apr 14 15:58:11 2010 Nobuyoshi Nakada <nobu@r...> + + * string.c (rb_string_value_cstr): make NUL terminated if it is + not done. + Wed Apr 14 12:56:21 2010 Shugo Maeda <shugo@r...> * lib/net/imap (encode_utf7): encode & properly. Thanks, Kengo Index: string.c =================================================================== --- string.c (revision 27336) +++ string.c (revision 27337) @@ -1375,10 +1375,12 @@ { VALUE str = rb_string_value(ptr); char *s = RSTRING_PTR(str); + long len = RSTRING_LEN(str); - if (!s || RSTRING_LEN(str) != (long)strlen(s)) { + if (!s || memchr(s, 0, len)) { rb_raise(rb_eArgError, "string contains null byte"); } + if (s[len]) rb_str_modify(str); return s; } Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 27336) +++ ruby_1_8/ChangeLog (revision 27337) @@ -1,3 +1,8 @@ +Wed Apr 14 15:58:11 2010 Nobuyoshi Nakada <nobu@r...> + + * string.c (rb_string_value_cstr): make NUL terminated if it is + not done. + Mon Apr 12 21:47:41 2010 Nobuyoshi Nakada <nobu@r...> * LEGAL: separated the section for parse.c. contributed by Paul Index: ruby_1_8/string.c =================================================================== --- ruby_1_8/string.c (revision 27336) +++ ruby_1_8/string.c (revision 27337) @@ -607,10 +607,12 @@ { VALUE str = rb_string_value(ptr); char *s = RSTRING(str)->ptr; + long len = RSTRING(str)->len; - if (!s || RSTRING(str)->len != strlen(s)) { + if (!s || memchr(s, 0, len)) { rb_raise(rb_eArgError, "string contains null byte"); } + if (s[len]) rb_str_modify(str); return s; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/