ruby-changes:4303
From: ko1@a...
Date: Tue, 18 Mar 2008 16:25:20 +0900 (JST)
Subject: [ruby-changes:4303] nobu - Ruby:r15793 (trunk): * parse.y (literal_concat_gen): bail out at different encoding.
nobu 2008-03-18 16:24:55 +0900 (Tue, 18 Mar 2008)
New Revision: 15793
Modified files:
trunk/ChangeLog
trunk/parse.y
Log:
* parse.y (literal_concat_gen): bail out at different encoding.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=15793&r2=15792&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15793&r2=15792&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15792)
+++ ChangeLog (revision 15793)
@@ -1,3 +1,7 @@
+Tue Mar 18 16:24:53 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * parse.y (literal_concat_gen): bail out at different encoding.
+
Tue Mar 18 04:00:27 2008 NARUSE, Yui <naruse@r...>
* re.c (rb_memsearch_ss): simple shift search.
Index: parse.y
===================================================================
--- parse.y (revision 15792)
+++ parse.y (revision 15793)
@@ -7465,15 +7465,19 @@
return head;
}
-static void
+static int
literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
{
if (!rb_enc_compatible(head, tail)) {
compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
rb_enc_name(rb_enc_get(head)),
rb_enc_name(rb_enc_get(tail)));
+ rb_str_resize(head, 0);
+ rb_str_resize(tail, 0);
+ return 0;
}
rb_str_buf_append(head, tail);
+ return 1;
}
/* concat two string literals */
@@ -7493,7 +7497,12 @@
switch (nd_type(tail)) {
case NODE_STR:
if (htype == NODE_STR) {
- literal_concat0(parser, head->nd_lit, tail->nd_lit);
+ if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
+ error:
+ rb_gc_force_recycle((VALUE)head);
+ rb_gc_force_recycle((VALUE)tail);
+ return 0;
+ }
rb_gc_force_recycle((VALUE)tail);
}
else {
@@ -7503,7 +7512,8 @@
case NODE_DSTR:
if (htype == NODE_STR) {
- literal_concat0(parser, head->nd_lit, tail->nd_lit);
+ if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
+ goto error;
tail->nd_lit = head->nd_lit;
rb_gc_force_recycle((VALUE)head);
head = tail;
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/