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__)