diff options
author | Claybird <claybird.without.wing@gmail.com> | 2020-01-07 22:07:52 +0900 |
---|---|---|
committer | Claybird <claybird.without.wing@gmail.com> | 2020-01-07 22:07:52 +0900 |
commit | fed31419c4ebaa41133d6e4f6d93bac4dde4b37a (patch) | |
tree | bf6a279cddba7171e44ada26203d1dd79b5723c9 /libarchive/archive_read_support_format_lha.c | |
parent | 3f1bad815d02160ab27f7063257aed4b25dbaebe (diff) | |
download | libarchive-fed31419c4ebaa41133d6e4f6d93bac4dde4b37a.tar.gz |
Fixed endian problem in lha UTF-16 encoding.
A patch to fix #1307
Diffstat (limited to 'libarchive/archive_read_support_format_lha.c')
-rw-r--r-- | libarchive/archive_read_support_format_lha.c | 7 |
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; } |