ruby-changes:16224
From: nobu <ko1@a...>
Date: Sun, 6 Jun 2010 22:37:50 +0900 (JST)
Subject: [ruby-changes:16224] Ruby:r28190 (trunk, ruby_1_9_2): * string.c (rb_str_buf_cat_escaped_char): get rid of buffer
nobu 2010-06-06 22:37:23 +0900 (Sun, 06 Jun 2010) New Revision: 28190 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28190 Log: * string.c (rb_str_buf_cat_escaped_char): get rid of buffer overflow on platforms int is bigger than 32bit, and warnings. Modified files: branches/ruby_1_9_2/ChangeLog branches/ruby_1_9_2/string.c trunk/ChangeLog trunk/string.c Index: ChangeLog =================================================================== --- ChangeLog (revision 28189) +++ ChangeLog (revision 28190) @@ -1,3 +1,8 @@ +Sun Jun 6 22:37:11 2010 Nobuyoshi Nakada <nobu@r...> + + * string.c (rb_str_buf_cat_escaped_char): get rid of buffer + overflow on platforms int is bigger than 32bit, and warnings. + Sun Jun 6 19:55:21 2010 Tanaka Akira <akr@f...> * array.c (rb_ary_product): clear uninitialized elements in temporary @@ -40,7 +45,7 @@ * re.c (rb_reg_expr_str): use rb_str_buf_cat_escaped_char when resenc is given: for Regexp#inspect or error message. - * re.c (rb_reg_desc): add 'n' for ENCODING_NONE. + * re.c (rb_reg_desc): add 'n' for ENCODING_NONE. Sat Jun 5 01:20:14 2010 NARUSE, Yui <naruse@r...> Index: string.c =================================================================== --- string.c (revision 28189) +++ string.c (revision 28190) @@ -4081,9 +4081,14 @@ #define CHAR_ESC_LEN 13 /* sizeof(\x{ hex of 32bit unsigned int } \0) */ int -rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p) { +rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p) +{ char buf[CHAR_ESC_LEN + 1]; int l; + +#if SIZEOF_INT > 4 + c &= 0xffffffff; +#endif if (unicode_p) { if (c < 0x7F && ISPRINT(c)) { snprintf(buf, CHAR_ESC_LEN, "%c", c); @@ -4103,7 +4108,7 @@ snprintf(buf, CHAR_ESC_LEN, "\\x{%X}", c); } } - l = strlen(buf); + l = (int)strlen(buf); /* CHAR_ESC_LEN cannot exceed INT_MAX */ rb_str_buf_cat(result, buf, l); return l; } Index: ruby_1_9_2/ChangeLog =================================================================== --- ruby_1_9_2/ChangeLog (revision 28189) +++ ruby_1_9_2/ChangeLog (revision 28190) @@ -1,3 +1,8 @@ +Sun Jun 6 22:37:11 2010 Nobuyoshi Nakada <nobu@r...> + + * string.c (rb_str_buf_cat_escaped_char): get rid of buffer + overflow on platforms int is bigger than 32bit, and warnings. + Sun Jun 6 10:44:34 2010 Nobuyoshi Nakada <nobu@r...> * array.c (rb_ary_product): need to set the length in order to get @@ -32,7 +37,7 @@ * re.c (rb_reg_expr_str): use rb_str_buf_cat_escaped_char when resenc is given: for Regexp#inspect or error message. - * re.c (rb_reg_desc): add 'n' for ENCODING_NONE. + * re.c (rb_reg_desc): add 'n' for ENCODING_NONE. Sat Jun 5 23:15:42 2010 NARUSE, Yui <naruse@r...> Index: ruby_1_9_2/string.c =================================================================== --- ruby_1_9_2/string.c (revision 28189) +++ ruby_1_9_2/string.c (revision 28190) @@ -4081,9 +4081,14 @@ #define CHAR_ESC_LEN 13 /* sizeof(\x{ hex of 32bit unsigned int } \0) */ int -rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p) { +rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p) +{ char buf[CHAR_ESC_LEN + 1]; int l; + +#if SIZEOF_INT > 4 + c &= 0xffffffff; +#endif if (unicode_p) { if (c < 0x7F && ISPRINT(c)) { snprintf(buf, CHAR_ESC_LEN, "%c", c); @@ -4103,7 +4108,7 @@ snprintf(buf, CHAR_ESC_LEN, "\\x{%X}", c); } } - l = strlen(buf); + l = (int)strlen(buf); /* CHAR_ESC_LEN cannot exceed INT_MAX */ rb_str_buf_cat(result, buf, l); return l; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/