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

ruby-changes:52918

From: usa <ko1@a...>
Date: Thu, 18 Oct 2018 00:17:39 +0900 (JST)
Subject: [ruby-changes:52918] usa:r65130 (ruby_2_3): merge revision(s) 65125:

usa	2018-10-18 00:09:24 +0900 (Thu, 18 Oct 2018)

  New Revision: 65130

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

  Log:
    merge revision(s) 65125:
    
    infect taint flag on Array#pack and String#unpack
    with the directives "B", "b", "H" and "h".
    
    * pack.c (pack_pack, pack_unpack_internal): infect taint flag.
    
    * test/ruby/test_pack.rb: add test for above.

  Modified directories:
    branches/ruby_2_3/
  Modified files:
    branches/ruby_2_3/pack.c
    branches/ruby_2_3/test/ruby/test_pack.rb
    branches/ruby_2_3/version.h
Index: ruby_2_3/pack.c
===================================================================
--- ruby_2_3/pack.c	(revision 65129)
+++ ruby_2_3/pack.c	(revision 65130)
@@ -751,6 +751,7 @@ pack_pack(VALUE ary, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L751
 	    StringValue(from);
 	    ptr = RSTRING_PTR(from);
 	    plen = RSTRING_LEN(from);
+	    OBJ_INFECT(res, from);
 
 	    if (len == 0 && type == 'm') {
 		encodes(res, ptr, plen, type, 0);
@@ -778,6 +779,7 @@ pack_pack(VALUE ary, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L779
 
 	  case 'M':		/* quoted-printable encoded string */
 	    from = rb_obj_as_string(NEXTFROM);
+	    OBJ_INFECT(res, from);
 	    if (len <= 1)
 		len = 72;
 	    qpencode(res, from, len);
@@ -803,6 +805,7 @@ pack_pack(VALUE ary, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L805
 		}
 		else {
 		    t = StringValuePtr(from);
+		    OBJ_INFECT(res, from);
 		    rb_obj_taint(from);
 		}
 		if (!associates) {
@@ -1292,6 +1295,7 @@ pack_unpack(VALUE str, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L1295
 		    len = (send - s) * 8;
 		bits = 0;
 		bitstr = rb_usascii_str_new(0, len);
+		OBJ_INFECT(bitstr, str);
 		t = RSTRING_PTR(bitstr);
 		for (i=0; i<len; i++) {
 		    if (i & 7) bits >>= 1;
@@ -1313,6 +1317,7 @@ pack_unpack(VALUE str, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L1317
 		    len = (send - s) * 8;
 		bits = 0;
 		bitstr = rb_usascii_str_new(0, len);
+		OBJ_INFECT(bitstr, str);
 		t = RSTRING_PTR(bitstr);
 		for (i=0; i<len; i++) {
 		    if (i & 7) bits <<= 1;
@@ -1334,6 +1339,7 @@ pack_unpack(VALUE str, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L1339
 		    len = (send - s) * 2;
 		bits = 0;
 		bitstr = rb_usascii_str_new(0, len);
+		OBJ_INFECT(bitstr, str);
 		t = RSTRING_PTR(bitstr);
 		for (i=0; i<len; i++) {
 		    if (i & 1)
@@ -1357,6 +1363,7 @@ pack_unpack(VALUE str, VALUE fmt) https://github.com/ruby/ruby/blob/trunk/ruby_2_3/pack.c#L1363
 		    len = (send - s) * 2;
 		bits = 0;
 		bitstr = rb_usascii_str_new(0, len);
+		OBJ_INFECT(bitstr, str);
 		t = RSTRING_PTR(bitstr);
 		for (i=0; i<len; i++) {
 		    if (i & 1)
Index: ruby_2_3/test/ruby/test_pack.rb
===================================================================
--- ruby_2_3/test/ruby/test_pack.rb	(revision 65129)
+++ ruby_2_3/test/ruby/test_pack.rb	(revision 65130)
@@ -829,4 +829,20 @@ EXPECTED https://github.com/ruby/ruby/blob/trunk/ruby_2_3/test/ruby/test_pack.rb#L829
     ret = []; "A".unpack("B*") {|v| ret << v }
     assert_equal ["01000001"], ret
   end
+
+  def test_pack_infection
+    tainted_array_string = ["123456"]
+    tainted_array_string.first.taint
+    ['a', 'A', 'Z', 'B', 'b', 'H', 'h', 'u', 'M', 'm', 'P', 'p'].each do |f|
+      assert_predicate(tainted_array_string.pack(f), :tainted?)
+    end
+  end
+
+  def test_unpack_infection
+    tainted_string = "123456"
+    tainted_string.taint
+    ['a', 'A', 'Z', 'B', 'b', 'H', 'h', 'u', 'M', 'm'].each do |f|
+      assert_predicate(tainted_string.unpack(f).first, :tainted?)
+    end
+  end
 end
Index: ruby_2_3/version.h
===================================================================
--- ruby_2_3/version.h	(revision 65129)
+++ ruby_2_3/version.h	(revision 65130)
@@ -1,10 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/version.h#L1
 #define RUBY_VERSION "2.3.7"
-#define RUBY_RELEASE_DATE "2018-10-17"
-#define RUBY_PATCHLEVEL 457
+#define RUBY_RELEASE_DATE "2018-10-18"
+#define RUBY_PATCHLEVEL 458
 
 #define RUBY_RELEASE_YEAR 2018
 #define RUBY_RELEASE_MONTH 10
-#define RUBY_RELEASE_DAY 17
+#define RUBY_RELEASE_DAY 18
 
 #include "ruby/version.h"
 
Index: ruby_2_3
===================================================================
--- ruby_2_3	(revision 65129)
+++ ruby_2_3	(revision 65130)

Property changes on: ruby_2_3
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r65125

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

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