]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
http://code.google.com/p/libarchive/issues/detail?id=325
authorTim Kientzle <kientzle@acm.org>
Fri, 12 Jul 2013 16:12:34 +0000 (09:12 -0700)
committerTim Kientzle <kientzle@acm.org>
Fri, 12 Jul 2013 16:12:34 +0000 (09:12 -0700)
Simplify the method/level checks here and fix a bug.

libarchive/archive_read_support_filter_lzop.c

index 713af31e99f0ca42d1869224b32c9edb1ca0f159..f8d04bd0ea5746b07355a85da1e8571ad036daff 100644 (file)
@@ -242,10 +242,11 @@ consume_header(struct archive_read_filter *self)
 
        if (version >= 0x940) {
                unsigned level = *p++;
-               if (method == 1 && level == 0) level = 3;
-               if (method == 2 && level == 0) level = 1;
-               if (method == 3 && level == 0) level = 9;
-               if (level < 1 && level > 9) {
+               unsigned default_level[] = {0, 3, 1, 9};
+               if (level == 0)
+                       /* Method is 1..3 here due to check above. */
+                       level = default_level[method];
+               else if (level > 9) {
                        archive_set_error(&self->archive->archive,
                            ARCHIVE_ERRNO_MISC, "Invalid level");
                        return (ARCHIVE_FAILED);