From 035b2ae42b32ff892dcc794a0f4513fe8d0be76e Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Mon, 28 Aug 2023 21:00:04 -0700 Subject: [PATCH] Fix xml_legal_value() with signed char Fixes: cd9959b4f62a ("Eliminate the dependency on libxml2") Resolves https://wimlib.net/forums/viewtopic.php?p=1608 --- NEWS.md | 6 ++++++ src/xmlproc.c | 3 ++- tests/test-imagex | 28 +++++++++++++++++++--------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/NEWS.md b/NEWS.md index d3637c02..8287edb1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,11 @@ # wimlib release notes +## Version 1.14.3-BETA1 + +- Fixed a bug introduced in v1.14.0 where non-ASCII characters stopped being + accepted in image names and descriptions. This bug only affected UNIX-like + systems that use `signed char`, e.g. x86 Linux systems. + ## Version 1.14.2 - Fixed a bug introduced in v1.14.0 where a crash would sometimes occur if a diff --git a/src/xmlproc.c b/src/xmlproc.c index d5de8945..6e1d2c16 100644 --- a/src/xmlproc.c +++ b/src/xmlproc.c @@ -341,7 +341,8 @@ bool xml_legal_value(const tchar *p) { for (; *p; p++) { - if (*p < 0x20 && !is_whitespace(*p)) + /* Careful: tchar can be signed. */ + if (*p > 0 && *p < 0x20 && !is_whitespace(*p)) return false; } return true; diff --git a/tests/test-imagex b/tests/test-imagex index 1d9fe820..c5e273f2 100755 --- a/tests/test-imagex +++ b/tests/test-imagex @@ -131,16 +131,26 @@ if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "0"; the fi rm -rf dir.wim tmp +name_desc_test() { + local name=$1 + local desc=$2 + if ! wimcapture dir dir.wim "$name" "$desc"; then + error "Failed to capture WIM with specified name and description" + fi + if ! test "`wiminfo dir.wim | grep Name | awk '{print $2}'`" = "$name"; then + error "WIM name not set correctly" + fi + if ! test "`wiminfo dir.wim | grep Description | awk '{print $2}'`" = "$desc"; then + error "WIM description not set correctly" + fi +} + echo "Testing capture of WIM with name and description" -if ! wimcapture dir dir.wim "myname" "mydesc"; then - error "Failed to capture WIM with specified name and description" -fi -if ! test "`wiminfo dir.wim | grep Name | awk '{print $2}'`" = "myname"; then - error "WIM name not set correctly" -fi -if ! test "`wiminfo dir.wim | grep Description | awk '{print $2}'`" = "mydesc"; then - error "WIM name not set correctly" -fi +name_desc_test "myname" "mydesc" + +echo "Testing capture of WIM with non-ASCII name and description" +name_desc_test "áéíóú" "¿?" + echo "Testing printing WIM lookup table" if ! wiminfo --lookup-table dir.wim > /dev/null; then error "Failed to print WIM lookup table" -- 2.43.0