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

ruby-changes:49337

From: nagachika <ko1@a...>
Date: Mon, 25 Dec 2017 03:59:58 +0900 (JST)
Subject: [ruby-changes:49337] nagachika:r61454 (ruby_2_4): merge revision(s) 60059: [Backport #13949]

nagachika	2017-12-25 03:59:53 +0900 (Mon, 25 Dec 2017)

  New Revision: 61454

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

  Log:
    merge revision(s) 60059: [Backport #13949]
    
    pack.c: unpack "M" may be ASCII only
    
    * pack.c (pack_unpack_internal): set ASCII only properly on "M",
      may be ASCII only.  [ruby-core:83055] [Bug #13949]

  Modified directories:
    branches/ruby_2_4/
  Modified files:
    branches/ruby_2_4/pack.c
    branches/ruby_2_4/test/ruby/test_pack.rb
    branches/ruby_2_4/version.h
Index: ruby_2_4/test/ruby/test_pack.rb
===================================================================
--- ruby_2_4/test/ruby/test_pack.rb	(revision 61453)
+++ ruby_2_4/test/ruby/test_pack.rb	(revision 61454)
@@ -686,6 +686,11 @@ EXPECTED https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_pack.rb#L686
     assert_equal(["pre=hoge"], "pre=hoge".unpack("M"))
     assert_equal(["pre==31after"], "pre==31after".unpack("M"))
     assert_equal(["pre===31after"], "pre===31after".unpack("M"))
+
+    bug = '[ruby-core:83055] [Bug #13949]'
+    s = "abcdef".unpack1("M")
+    assert_equal(Encoding::ASCII_8BIT, s.encoding)
+    assert_predicate(s, :ascii_only?, bug)
   end
 
   def test_pack_unpack_P2
Index: ruby_2_4/pack.c
===================================================================
--- ruby_2_4/pack.c	(revision 61453)
+++ ruby_2_4/pack.c	(revision 61454)
@@ -1609,6 +1609,7 @@ pack_unpack_internal(VALUE str, VALUE fm https://github.com/ruby/ruby/blob/trunk/ruby_2_4/pack.c#L1609
 	    {
 		VALUE buf = infected_str_new(0, send - s, str);
 		char *ptr = RSTRING_PTR(buf), *ss = s;
+		int csum = 0;
 		int c1, c2;
 
 		while (s < send) {
@@ -1620,18 +1621,19 @@ pack_unpack_internal(VALUE str, VALUE fm https://github.com/ruby/ruby/blob/trunk/ruby_2_4/pack.c#L1621
 			    if ((c1 = hex2num(*s)) == -1) break;
 			    if (++s == send) break;
 			    if ((c2 = hex2num(*s)) == -1) break;
-			    *ptr++ = castchar(c1 << 4 | c2);
+			    csum |= *ptr++ = castchar(c1 << 4 | c2);
 			}
 		    }
 		    else {
-			*ptr++ = *s;
+			csum |= *ptr++ = *s;
 		    }
 		    s++;
 		    ss = s;
 		}
 		rb_str_set_len(buf, ptr - RSTRING_PTR(buf));
 		rb_str_buf_cat(buf, ss, send-ss);
-		ENCODING_CODERANGE_SET(buf, rb_ascii8bit_encindex(), ENC_CODERANGE_VALID);
+		csum = ISASCII(csum) ? ENC_CODERANGE_7BIT : ENC_CODERANGE_VALID;
+		ENCODING_CODERANGE_SET(buf, rb_ascii8bit_encindex(), csum);
 		UNPACK_PUSH(buf);
 	    }
 	    break;
Index: ruby_2_4/version.h
===================================================================
--- ruby_2_4/version.h	(revision 61453)
+++ ruby_2_4/version.h	(revision 61454)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/version.h#L1
 #define RUBY_VERSION "2.4.4"
 #define RUBY_RELEASE_DATE "2017-12-25"
-#define RUBY_PATCHLEVEL 224
+#define RUBY_PATCHLEVEL 225
 
 #define RUBY_RELEASE_YEAR 2017
 #define RUBY_RELEASE_MONTH 12
Index: ruby_2_4
===================================================================
--- ruby_2_4	(revision 61453)
+++ ruby_2_4	(revision 61454)

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

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

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