summaryrefslogtreecommitdiff
path: root/libarchive/archive_read_support_format_tar.c
diff options
context:
space:
mode:
authorMartin Matuška <martin@matuska.org>2021-07-18 00:49:43 +0200
committerGitHub <noreply@github.com>2021-07-18 00:49:43 +0200
commit81fa2bf8e95af070924b414ae0165e11e89123ff (patch)
treed18e39dd9b88f554acdc70ebe3de363ad8a670ea /libarchive/archive_read_support_format_tar.c
parente5a38a890662a38c1b23223edda76c4de65bbccd (diff)
parentf2b582881d622db623ae2700008225fd1a007663 (diff)
downloadlibarchive-81fa2bf8e95af070924b414ae0165e11e89123ff.tar.gz
Merge pull request #1542 from ferivoz/intmax
Handle all negative int64_t values in mtree/tar
Diffstat (limited to 'libarchive/archive_read_support_format_tar.c')
-rw-r--r--libarchive/archive_read_support_format_tar.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libarchive/archive_read_support_format_tar.c b/libarchive/archive_read_support_format_tar.c
index 9a32562d..7e8febac 100644
--- a/libarchive/archive_read_support_format_tar.c
+++ b/libarchive/archive_read_support_format_tar.c
@@ -2643,14 +2643,14 @@ tar_atol_base_n(const char *p, size_t char_cnt, int base)
maxval = INT64_MIN;
limit = -(INT64_MIN / base);
- last_digit_limit = INT64_MIN % base;
+ last_digit_limit = -(INT64_MIN % base);
}
l = 0;
if (char_cnt != 0) {
digit = *p - '0';
while (digit >= 0 && digit < base && char_cnt != 0) {
- if (l>limit || (l == limit && digit > last_digit_limit)) {
+ if (l>limit || (l == limit && digit >= last_digit_limit)) {
return maxval; /* Truncate on overflow. */
}
l = (l * base) + digit;