summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--file.c2
-rw-r--r--test/-ext-/string/test_normalize.rb11
3 files changed, 15 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ec5224..0699c13 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jul 7 15:02:18 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_str_normalize_ospath): skip invalid byte sequence not
+ to loop infinitely. this case usually does not happen as the
+ input name should come from real file systems.
+
Tue Jul 7 14:40:08 2015 Koichi Sasada <ko1@atdot.net>
* vm_backtrace.c: remove debug flag introduced accidentaly.
diff --git a/file.c b/file.c
index 96b89e5..1adbe76 100644
--- a/file.c
+++ b/file.c
@@ -294,6 +294,8 @@ rb_str_normalize_ospath(const char *ptr, long len)
rb_str_append(str, rb_str_normalize_ospath0(p1, p-p1));
rb_str_cat2(str, "\xEF\xBF\xBD");
p += 1;
+ p1 = p;
+ continue;
}
l = MBCLEN_CHARFOUND_LEN(r);
c = rb_enc_mbc_to_codepoint(p, e, enc);
diff --git a/test/-ext-/string/test_normalize.rb b/test/-ext-/string/test_normalize.rb
index 283ca93..83bbfd3 100644
--- a/test/-ext-/string/test_normalize.rb
+++ b/test/-ext-/string/test_normalize.rb
@@ -59,7 +59,6 @@ class Test_StringNormalize < Test::Unit::TestCase
assert_equal expected, result,
"#{expected.dump} is expected but #{src.dump}"
end
- rescue NotImplementedError
end
def test_not_normalize_kc
@@ -79,7 +78,6 @@ class Test_StringNormalize < Test::Unit::TestCase
assert_equal src, result,
"#{src.dump} is expected not to be normalized, but #{result.dump}"
end
- rescue NotImplementedError
end
def test_dont_normalize_hfsplus
@@ -101,6 +99,11 @@ class Test_StringNormalize < Test::Unit::TestCase
assert_equal src, result,
"#{src.dump} is expected not to be normalized, but #{result.dump}"
end
- rescue NotImplementedError
end
-end
+
+ def test_invalid_sequence
+ assert_separately(%w[-r-test-/string/string], <<-'end;')
+ assert_equal("\u{fffd}", Bug::String.new("\xff").normalize_ospath)
+ end;
+ end
+end if Bug::String.method_defined?(:normalize_ospath)