]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
archive_string_append_from_wcs: add test case for conversion failure
authorBrad King <brad.king@kitware.com>
Thu, 5 Feb 2026 14:05:57 +0000 (09:05 -0500)
committerBrad King <brad.king@kitware.com>
Thu, 5 Feb 2026 23:53:28 +0000 (18:53 -0500)
libarchive/test/test_archive_string_conversion.c

index 055bddc750688e6293936515e7d9ea990809b6d5..d7bd47c48900fca46bc355728acfd8710f5745be 100644 (file)
@@ -883,6 +883,36 @@ DEFINE_TEST(test_archive_string_conversion)
        test_archive_string_set_get();
 }
 
+static void
+test_archive_string_conversion_fail_utf16_mbs(struct archive *a)
+{
+       static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438";
+       int r;
+
+       /* WCS to MBS should fail.  */
+       {
+               struct archive_string str;
+               archive_string_init(&str);
+               r = archive_string_append_from_wcs(
+                   &str, wcs_string, sizeof(wcs_string) / sizeof(*wcs_string) - 1);
+               assertEqualInt(-1, r);
+               archive_string_free(&str);
+       }
+}
+
+DEFINE_TEST(test_archive_string_conversion_fail_c)
+{
+       struct archive *a;
+
+       /* Test the C locale by not calling setlocale.  */
+
+       assert((a = archive_write_new()) != NULL);
+
+       test_archive_string_conversion_fail_utf16_mbs(a);
+
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+}
+
 DEFINE_TEST(test_archive_string_conversion_utf16_utf8)
 {
 #if !defined(_WIN32) || defined(__CYGWIN__)