summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Matuška <martin@matuska.org>2020-01-07 21:20:23 +0100
committerGitHub <noreply@github.com>2020-01-07 21:20:23 +0100
commitf881dd24a4deab54ee8a3b84758c852d16fbd357 (patch)
treebf6a279cddba7171e44ada26203d1dd79b5723c9
parent3f1bad815d02160ab27f7063257aed4b25dbaebe (diff)
parentfed31419c4ebaa41133d6e4f6d93bac4dde4b37a (diff)
downloadlibarchive-f881dd24a4deab54ee8a3b84758c852d16fbd357.tar.gz
Merge pull request #1308 from Claybird/fix_lha_endian
Fixed endian problem in lha UTF-16 encoding. Fixes #1307
-rw-r--r--libarchive/archive_read_support_format_lha.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libarchive/archive_read_support_format_lha.c b/libarchive/archive_read_support_format_lha.c
index 35405bcd..f0337759 100644
--- a/libarchive/archive_read_support_format_lha.c
+++ b/libarchive/archive_read_support_format_lha.c
@@ -1286,17 +1286,18 @@ lha_read_file_extended_header(struct archive_read *a, struct lha *lha,
return (ARCHIVE_FATAL);
else {
/*
- * Convert directory delimiter from 0xFF
+ * Convert directory delimiter from 0xFFFF
* to '/' for local system.
*/
+ uint16_t dirSep = '/'; /* UTF-16LE */
/* UTF-16LE character */
uint16_t *utf16name = (uint16_t *)lha->dirname.s;
for (i = 0; i < lha->dirname.length / 2; i++) {
if (utf16name[i] == 0xFFFF)
- utf16name[i] = L'/';
+ utf16name[i] = dirSep;
}
/* Is last character directory separator? */
- if (utf16name[lha->dirname.length / 2 - 1] != L'/')
+ if (utf16name[lha->dirname.length / 2 - 1] != dirSep)
/* invalid directory data */
goto invalid;
}