]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
RAR5 reader: fix last commit - use read_var() and fix casts
authorMartin Matuska <martin@matuska.org>
Thu, 18 Apr 2019 09:50:35 +0000 (11:50 +0200)
committerMartin Matuska <martin@matuska.org>
Thu, 18 Apr 2019 11:19:27 +0000 (13:19 +0200)
libarchive/archive_read_support_format_rar5.c

index 70796e358981d353875c48a1c9c3dfbe7cef0bff..7123e408a99523d7971fb0c0642b51e0e26cb858 100644 (file)
@@ -1259,42 +1259,43 @@ static int parse_file_extra_redir(struct archive_read* a,
         struct archive_entry* e, struct rar5* rar,
         ssize_t* extra_data_size)
 {
-       size_t value_len = 0;
+       uint64_t value_size = 0;
+       size_t target_size = 0;
        char target_utf8_buf[2048 * 4];
        const uint8_t* p;
 
-       if(!read_var_sized(a, &rar->file.redir_type, &value_len))
+       if(!read_var(a, &rar->file.redir_type, &value_size))
                return ARCHIVE_EOF;
-       if(ARCHIVE_OK != consume(a, value_len))
+       if(ARCHIVE_OK != consume(a, (int64_t)value_size))
                return ARCHIVE_EOF;
-       *extra_data_size -= value_len;
+       *extra_data_size -= value_size;
 
-       if(!read_var_sized(a, &rar->file.redir_flags, &value_len))
+       if(!read_var(a, &rar->file.redir_flags, &value_size))
                return ARCHIVE_EOF;
-       if(ARCHIVE_OK != consume(a, value_len))
+       if(ARCHIVE_OK != consume(a, (int64_t)value_size))
                return ARCHIVE_EOF;
-       *extra_data_size -= value_len;
+       *extra_data_size -= value_size;
 
-       if(!read_var_sized(a, &value_len, NULL))
+       if(!read_var_sized(a, &target_size, NULL))
                return ARCHIVE_EOF;
-        *extra_data_size -= value_len + 1;
-       if(!read_ahead(a, value_len, &p))
+        *extra_data_size -= target_size + 1;
+       if(!read_ahead(a, target_size, &p))
                return ARCHIVE_EOF;
 
-       if(value_len > 2047) {
+       if(target_size > 2047) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "Link target is too long");
                return ARCHIVE_FATAL;
        }
-       if(value_len == 0) {
+       if(target_size == 0) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "No link target specified");
                return ARCHIVE_FATAL;
        }
-       memcpy(target_utf8_buf, p, value_len);
-       target_utf8_buf[value_len] = 0;
+       memcpy(target_utf8_buf, p, target_size);
+       target_utf8_buf[target_size] = 0;
 
-       if(ARCHIVE_OK != consume(a, value_len))
+       if(ARCHIVE_OK != consume(a, (int64_t)target_size))
                return ARCHIVE_EOF;
 
        switch(rar->file.redir_type) {
@@ -1318,12 +1319,10 @@ static int parse_file_extra_redir(struct archive_read* a,
 
                default:
                        /* Unknown redir type */
-                       if(ARCHIVE_OK != consume(a, value_len))
-                               return ARCHIVE_EOF;
                        archive_set_error(&a->archive,
                            ARCHIVE_ERRNO_FILE_FORMAT,
-                           "Unsupported redir type: %ld",
-                           rar->file.redir_type);
+                           "Unsupported redir type: %d",
+                           (int)rar->file.redir_type);
                        return ARCHIVE_FATAL;
                        break;
        }
@@ -1334,69 +1333,70 @@ static int parse_file_extra_owner(struct archive_read* a,
         struct archive_entry* e, ssize_t* extra_data_size)
 {
        uint64_t flags = 0;
-       size_t value_len = 0;
+       uint64_t value_size = 0;
+       uint64_t id = 0;
        size_t name_len = 0;
-       size_t id = 0;
+       size_t name_size = 0;
        char namebuf[OWNER_MAXNAMELEN];
        const uint8_t* p;
 
-       if(!read_var_sized(a, &flags, &value_len))
+       if(!read_var(a, &flags, &value_size))
                return ARCHIVE_EOF;
-       if(ARCHIVE_OK != consume(a, value_len))
+       if(ARCHIVE_OK != consume(a, (int64_t)value_size))
                return ARCHIVE_EOF;
-       *extra_data_size -= value_len;
+       *extra_data_size -= value_size;
 
        if ((flags & OWNER_USER_NAME) != 0) {
-               if(!read_var_sized(a, &value_len, NULL))
+               if(!read_var_sized(a, &name_size, NULL))
                        return ARCHIVE_EOF;
-               *extra_data_size -= value_len + 1;
-               if(!read_ahead(a, value_len, &p))
+               *extra_data_size -= name_size + 1;
+               if(!read_ahead(a, name_size, &p))
                        return ARCHIVE_EOF;
-               if (value_len > OWNER_MAXNAMELEN)
+               if (name_size > OWNER_MAXNAMELEN)
                        name_len = OWNER_MAXNAMELEN;
                else
-                       name_len = value_len;
+                       name_len = name_size;
                memcpy(namebuf, p, name_len);
                namebuf[name_len] = 0;
-               if(ARCHIVE_OK != consume(a, value_len))
+               if(ARCHIVE_OK != consume(a, (int64_t)name_size))
                        return ARCHIVE_EOF;
 
                archive_entry_set_uname(e, namebuf);
        }
        if ((flags & OWNER_GROUP_NAME) != 0) {
-               if(!read_var_sized(a, &value_len, NULL))
+               if(!read_var_sized(a, &name_size, NULL))
                        return ARCHIVE_EOF;
-               *extra_data_size -= value_len + 1;
-               if(!read_ahead(a, value_len, &p))
+               *extra_data_size -= name_size + 1;
+               if(!read_ahead(a, name_size, &p))
                        return ARCHIVE_EOF;
-               if (value_len > OWNER_MAXNAMELEN)
+               if (name_size > OWNER_MAXNAMELEN)
                        name_len = OWNER_MAXNAMELEN;
                else
-                       name_len = value_len;
+                       name_len = name_size;
                memcpy(namebuf, p, name_len);
                namebuf[name_len] = 0;
-               if(ARCHIVE_OK != consume(a, value_len))
+               if(ARCHIVE_OK != consume(a, (int64_t)name_size))
                        return ARCHIVE_EOF;
 
                archive_entry_set_gname(e, namebuf);
        }
        if ((flags & OWNER_USER_UID) != 0) {
-               if(!read_var_sized(a, &id, &value_len))
+               if(!read_var(a, &id, &value_size))
                        return ARCHIVE_EOF;
-               if(ARCHIVE_OK != consume(a, value_len))
+               if(ARCHIVE_OK != consume(a, (int64_t)value_size))
                        return ARCHIVE_EOF;
-               *extra_data_size -= value_len;
+               *extra_data_size -= value_size;
 
-               archive_entry_set_uid(e, id);
+               archive_entry_set_uid(e, (la_int64_t)id);
        }
        if ((flags & OWNER_GROUP_GID) != 0) {
-               if(!read_var_sized(a, &id, &value_len))
+               if(!read_var(a, &id, &value_size))
                        return ARCHIVE_EOF;
-               if(ARCHIVE_OK != consume(a, value_len))
+               if(ARCHIVE_OK != consume(a, (int64_t)value_size))
                        return ARCHIVE_EOF;
-               *extra_data_size -= value_len;
+               *extra_data_size -= value_size;
 
-               archive_entry_set_gid(e, id);
+               archive_entry_set_gid(e, (la_int64_t)id);
        }
        return ARCHIVE_OK;
 }