From: Claybird Date: Tue, 7 Jan 2020 13:07:52 +0000 (+0900) Subject: Fixed endian problem in lha UTF-16 encoding. X-Git-Tag: v3.4.2~49^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F1308%2Fhead;p=thirdparty%2Flibarchive.git Fixed endian problem in lha UTF-16 encoding. A patch to fix #1307 --- diff --git a/libarchive/archive_read_support_format_lha.c b/libarchive/archive_read_support_format_lha.c index 35405bcdd..f03377592 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; }