From fed31419c4ebaa41133d6e4f6d93bac4dde4b37a Mon Sep 17 00:00:00 2001 From: Claybird Date: Tue, 7 Jan 2020 22:07:52 +0900 Subject: [PATCH] Fixed endian problem in lha UTF-16 encoding. A patch to fix #1307 --- libarchive/archive_read_support_format_lha.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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; } -- 2.47.2