aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/psych/parser.c7
-rw-r--r--test/psych/test_encoding.rb2
3 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 7c83e53d48..8986774242 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Apr 7 02:07:00 2012 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c: fall back to any encoding if the external
+ encoding is wrong. [ruby-core:44163]
+ * test/psych/test_encoding.rb: fix test
+
Fri Apr 6 16:24:24 2012 Martin Duerst <duerst@it.aoyama.ac.jp>
* struct.c (documentation for rb_struct_members_m):
diff --git a/ext/psych/parser.c b/ext/psych/parser.c
index 9808c6b60e..6f4c4569e9 100644
--- a/ext/psych/parser.c
+++ b/ext/psych/parser.c
@@ -146,10 +146,11 @@ static VALUE transcode_io(VALUE src, int * parser_encoding)
return src;
}
- rb_raise(rb_eArgError, "YAML file must be UTF-8, UTF-16LE, or UTF-16BE, not %s",
- rb_enc_name(rb_enc_from_index(io_external_enc_index)));
+ /* If the external encoding is something we don't know how to handle,
+ * fall back to YAML_ANY_ENCODING. */
+ *parser_encoding = YAML_ANY_ENCODING;
- return Qnil;
+ return src;
}
#endif
diff --git a/test/psych/test_encoding.rb b/test/psych/test_encoding.rb
index 8efb676d9a..1abee0df16 100644
--- a/test/psych/test_encoding.rb
+++ b/test/psych/test_encoding.rb
@@ -57,7 +57,7 @@ module Psych
# If the external encoding isn't utf8, utf16le, or utf16be, we cannot
# process the file.
File.open(t.path, 'r', :encoding => 'SHIFT_JIS') do |f|
- assert_raises ArgumentError do
+ assert_raises Psych::SyntaxError do
Psych.load(f)
end
end