From: Tim Kientzle Date: Fri, 12 Jul 2013 16:12:34 +0000 (-0700) Subject: http://code.google.com/p/libarchive/issues/detail?id=325 X-Git-Tag: v3.1.900a~368^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2bc28c74b640ea8b0d252a766371a15ed40314a3;p=thirdparty%2Flibarchive.git http://code.google.com/p/libarchive/issues/detail?id=325 Simplify the method/level checks here and fix a bug. --- diff --git a/libarchive/archive_read_support_filter_lzop.c b/libarchive/archive_read_support_filter_lzop.c index 713af31e9..f8d04bd0e 100644 --- a/libarchive/archive_read_support_filter_lzop.c +++ b/libarchive/archive_read_support_filter_lzop.c @@ -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);