summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-08 14:08:44 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-08 14:08:44 +0000
commita98bb55e012612d7e16c10a37eb104433af83c27 (patch)
tree2c7212cc039c4e366d68185abe071eaefdcc1d4e
parentbe2fc605fc26a252e35240811c8d024ea96f3ba5 (diff)
* transcode.c (rb_econv_insert_output): "readagain" part should be
after replacement. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_econv.rb5
-rw-r--r--transcode.c4
3 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a51205d412..b980cecc6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Sep 8 23:05:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_insert_output): "readagain" part should be
+ after replacement.
+
Mon Sep 8 22:30:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
* dir.c (dir_initialize): rename option name of Dir.open
diff --git a/test/ruby/test_econv.rb b/test/ruby/test_econv.rb
index 514cac568c..d796db8824 100644
--- a/test/ruby/test_econv.rb
+++ b/test/ruby/test_econv.rb
@@ -798,4 +798,9 @@ class TestEncodingConverter < Test::Unit::TestCase
assert_equal("&amp;\u3046\u2661&amp;\"'".force_encoding("utf-8"),
"&\u3046\u2661&\"'".encode("utf-8", xml: :text))
end
+
+ def test_iso2022jp_invalid_replace
+ assert_equal("?x".force_encoding("iso-2022-jp"),
+ "\222\xA1x".encode("iso-2022-jp", "stateless-iso-2022-jp", :invalid => :replace))
+ end
end
diff --git a/transcode.c b/transcode.c
index 49e8ed3856..8794f24e24 100644
--- a/transcode.c
+++ b/transcode.c
@@ -1578,13 +1578,13 @@ rb_econv_insert_output(rb_econv_t *ec,
}
}
+ memcpy(*data_end_p, insert_str, insert_len);
+ *data_end_p += insert_len;
if (tc && tc->transcoder->stateful_type == stateful_encoder) {
memcpy(*data_end_p, TRANSCODING_READBUF(tc)+tc->recognized_len, tc->readagain_len);
*data_end_p += tc->readagain_len;
tc->readagain_len = 0;
}
- memcpy(*data_end_p, insert_str, insert_len);
- *data_end_p += insert_len;
if (insert_str != str && insert_str != insert_buf)
xfree((void*)insert_str);