about summary refs log tree commit diff
path: root/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c')
-rw-r--r--pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c b/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
index 40400ef832832..90981c5820f35 100644
--- a/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
+++ b/pkgs/by-name/li/libiconv-darwin/nixpkgs_test.c
@@ -73,10 +73,44 @@ ATF_TC_BODY(test_cp932_cp932, tc)
     ATF_CHECK_STREQ(expected, output);
 }
 
+ATF_TC(test_iso2022_crash);
+ATF_TC_HEAD(test_iso2022_crash, tc)
+{
+    atf_tc_set_md_var(tc, "descr", "regression test for converting to ISO-2022 with escape sequences");
+}
+ATF_TC_BODY(test_iso2022_crash, tc)
+{
+    char expected[] = "";
+    size_t expected_length = sizeof(expected) - 1;
+
+    char input[] = "\x41\x41\x41\x41\x41\xe5\x8a\x84";
+    size_t input_length = sizeof(input) - 1;
+
+    size_t output_available = sizeof(expected) - 1 ;
+    char output[sizeof(expected)] = { 0 };
+
+    iconv_t cd = iconv_open("ISO-2022-CN-EXT", "UTF-8");
+    ATF_REQUIRE((size_t)cd != -1);
+
+    char* input_buf = input;
+    char* output_buf = output;
+
+    size_t res = iconv(cd, &input_buf, &input_length, &output_buf, &output_available);
+    iconv_close(cd);
+
+    ATF_CHECK(res == -1);
+
+    size_t output_length = sizeof(output) - output_available - 1;
+
+    ATF_CHECK_INTEQ(expected_length, output_length);
+    ATF_CHECK_STREQ(expected, output);
+}
+
 ATF_TP_ADD_TCS(tp)
 {
     ATF_TP_ADD_TC(tp, test_cp932_eucjp);
     ATF_TP_ADD_TC(tp, test_cp932_cp932);
+    ATF_TP_ADD_TC(tp, test_iso2022_crash);
 
     return atf_no_error();
 }