]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Fixed endian problem in lha UTF-16 encoding. 1308/head
authorClaybird <claybird.without.wing@gmail.com>
Tue, 7 Jan 2020 13:07:52 +0000 (22:07 +0900)
committerClaybird <claybird.without.wing@gmail.com>
Tue, 7 Jan 2020 13:07:52 +0000 (22:07 +0900)
A patch to fix #1307

libarchive/archive_read_support_format_lha.c

index 35405bcdd97fe8a82bb7655a6dab42733f83a385..f03377592b11288a002962de5b712a8dfab29ae0 100644 (file)
@@ -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;
                        }