[前][次][番号順一覧][スレッド一覧]

ruby-changes:36946

From: nobu <ko1@a...>
Date: Fri, 26 Dec 2014 15:13:20 +0900 (JST)
Subject: [ruby-changes:36946] nobu:r49027 (trunk): parser.rl: check before use

nobu	2014-12-26 15:13:15 +0900 (Fri, 26 Dec 2014)

  New Revision: 49027

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49027

  Log:
    parser.rl: check before use
    
    * ext/json/parser/parser.rl (unescape_unicode): check if valid
      before bit-or assignments.
      reported by Denis Denisov <denji0k AT gmail.com>.

  Modified files:
    trunk/ChangeLog
    trunk/ext/json/parser/parser.c
    trunk/ext/json/parser/parser.rl
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49026)
+++ ChangeLog	(revision 49027)
@@ -1,4 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
-Fri Dec 26 15:09:27 2014  Nobuyoshi Nakada  <nobu@r...>
+Fri Dec 26 15:13:13 2014  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/json/parser/parser.rl (unescape_unicode): check if valid
+	  before bit-or assignments.
+	  reported by Denis Denisov <denji0k AT gmail.com>.
 
 	* ext/nkf/nkf-utf8/nkf.c (nkf_iconv_t): fix a missing semicolon.
 	  reported by Denis Denisov <denji0k AT gmail.com>.
Index: ext/json/parser/parser.rl
===================================================================
--- ext/json/parser/parser.rl	(revision 49026)
+++ ext/json/parser/parser.rl	(revision 49027)
@@ -26,16 +26,16 @@ static UTF32 unescape_unicode(const unsi https://github.com/ruby/ruby/blob/trunk/ext/json/parser/parser.rl#L26
     UTF32 result = 0;
     b = digit_values[p[0]];
     if (b < 0) return UNI_REPLACEMENT_CHAR;
-    result = (result << 4) | b;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[1]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[2]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[3]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     return result;
 }
 
@@ -883,7 +883,7 @@ static VALUE cParser_quirks_mode_p(VALUE https://github.com/ruby/ruby/blob/trunk/ext/json/parser/parser.rl#L883
 }
 
 
-void Init_parser()
+void Init_parser(void)
 {
     rb_require("json/common");
     mJSON = rb_define_module("JSON");
Index: ext/json/parser/parser.c
===================================================================
--- ext/json/parser/parser.c	(revision 49026)
+++ ext/json/parser/parser.c	(revision 49027)
@@ -28,16 +28,16 @@ static UTF32 unescape_unicode(const unsi https://github.com/ruby/ruby/blob/trunk/ext/json/parser/parser.c#L28
     UTF32 result = 0;
     b = digit_values[p[0]];
     if (b < 0) return UNI_REPLACEMENT_CHAR;
-    result = (result << 4) | b;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[1]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[2]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     b = digit_values[p[3]];
-    result = (result << 4) | b;
     if (b < 0) return UNI_REPLACEMENT_CHAR;
+    result = (result << 4) | (unsigned char)b;
     return result;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]