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

ruby-changes:48861

From: nobu <ko1@a...>
Date: Sat, 2 Dec 2017 16:09:22 +0900 (JST)
Subject: [ruby-changes:48861] nobu:r60979 (trunk): string.c: fix rb_external_str_new_with_enc

nobu	2017-12-02 16:09:16 +0900 (Sat, 02 Dec 2017)

  New Revision: 60979

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

  Log:
    string.c: fix rb_external_str_new_with_enc
    
    * string.c (rb_external_str_new_with_enc): do not search non-ascii
      by NULL pointer.  [ruby-core:84055] [Bug #14150]

  Added files:
    trunk/ext/-test-/string/new.c
    trunk/test/-ext-/string/test_external_new.rb
  Modified files:
    trunk/string.c
Index: string.c
===================================================================
--- string.c	(revision 60978)
+++ string.c	(revision 60979)
@@ -1011,6 +1011,10 @@ rb_external_str_new_with_enc(const char https://github.com/ruby/ruby/blob/trunk/string.c#L1011
     VALUE str;
     const int eidx = rb_enc_to_index(eenc);
 
+    if (!ptr) {
+	return rb_tainted_str_new_with_enc(ptr, len, eenc);
+    }
+
     /* ASCII-8BIT case, no conversion */
     if ((eidx == rb_ascii8bit_encindex()) ||
 	(eidx == rb_usascii_encindex() && search_nonascii(ptr, ptr + len))) {
Index: ext/-test-/string/new.c
===================================================================
--- ext/-test-/string/new.c	(nonexistent)
+++ ext/-test-/string/new.c	(revision 60979)
@@ -0,0 +1,21 @@ https://github.com/ruby/ruby/blob/trunk/ext/-test-/string/new.c#L1
+#include "ruby.h"
+#include "ruby/encoding.h"
+
+VALUE
+bug_str_buf_new(VALUE self, VALUE len)
+{
+    return rb_str_buf_new(NUM2LONG(len));
+}
+
+VALUE
+bug_external_str_new(VALUE self, VALUE len, VALUE enc)
+{
+    return rb_external_str_new_with_enc(NULL, NUM2LONG(len), rb_to_encoding(enc));
+}
+
+void
+Init_new(VALUE klass)
+{
+    rb_define_singleton_method(klass, "buf_new", bug_str_buf_new, 1);
+    rb_define_singleton_method(klass, "external_new", bug_external_str_new, 2);
+}

Property changes on: ext/-test-/string/new.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: test/-ext-/string/test_external_new.rb
===================================================================
--- test/-ext-/string/test_external_new.rb	(nonexistent)
+++ test/-ext-/string/test_external_new.rb	(revision 60979)
@@ -0,0 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/test/-ext-/string/test_external_new.rb#L1
+# frozen_string_literal: false
+require 'test/unit'
+require '-test-/string'
+
+class Test_StringExternalNew < Test::Unit::TestCase
+  def test_external_new_with_enc
+    Encoding.list.each do |enc|
+      assert_equal(enc, Bug::String.external_new(0, enc).encoding)
+    end
+  end
+end

Property changes on: test/-ext-/string/test_external_new.rb
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property

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

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