From: Brad King Date: Thu, 5 Feb 2026 14:05:57 +0000 (-0500) Subject: archive_string_append_from_wcs: add test case for conversion failure X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eacdc8d99c688bd1845ede183ded9f0c760d69f8;p=thirdparty%2Flibarchive.git archive_string_append_from_wcs: add test case for conversion failure --- diff --git a/libarchive/test/test_archive_string_conversion.c b/libarchive/test/test_archive_string_conversion.c index 055bddc75..d7bd47c48 100644 --- a/libarchive/test/test_archive_string_conversion.c +++ b/libarchive/test/test_archive_string_conversion.c @@ -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__)