summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-10-28 10:59:55 +0200
committerJulian Andres Klode <jak@debian.org>2017-10-28 11:35:39 +0200
commita6375472a41af7f1521369d0c22a858d7051ab18 (patch)
tree74df8b448ef3f24bb7326b8214051423594f0bb1
parentcfb6061b82daa67def0349938bf6267c37e9906d (diff)
Prevent overflow in Installed-Size (and Size) in apt show
Installed-Size for linux-image-4.13.0-1-amd64-dbg and friends are larger than 4 GB, but read as a signed integer - that's fine so far, as the value is in KB, but it's multiplied with 1024 which overflows. So let's read it as unsigned long long instead. While we're at it, also use unsigned long long for Size, in case that is bigger than 2 GB.
-rw-r--r--apt-private/private-show.cc4
-rwxr-xr-xtest/integration/test-apt-cli-show12
2 files changed, 14 insertions, 2 deletions
diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc
index 3cc6a5b87..1baf7990a 100644
--- a/apt-private/private-show.cc
+++ b/apt-private/private-show.cc
@@ -185,12 +185,12 @@ static bool DisplayRecordV2(pkgCacheFile &CacheFile, pkgCache::VerIterator const
// make size nice
std::string installed_size;
if (Tags.FindI("Installed-Size") > 0)
- strprintf(installed_size, "%sB", SizeToStr(Tags.FindI("Installed-Size")*1024).c_str());
+ strprintf(installed_size, "%sB", SizeToStr(Tags.FindULL("Installed-Size") * 1024).c_str());
else
installed_size = _("unknown");
std::string package_size;
if (Tags.FindI("Size") > 0)
- strprintf(package_size, "%sB", SizeToStr(Tags.FindI("Size")).c_str());
+ strprintf(package_size, "%sB", SizeToStr(Tags.FindULL("Size")).c_str());
else
package_size = _("unknown");
diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show
index 754b3aa5f..935d93d86 100755
--- a/test/integration/test-apt-cli-show
+++ b/test/integration/test-apt-cli-show
@@ -11,6 +11,7 @@ DESCR='Some description
That has multiple lines'
insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR"
insertpackage 'unstable' 'bar' 'i386,amd64' '1' '' '' "$DESCR"
+insertpackage 'unstable' 'big' 'i386,amd64' '1' 'Installed-Size: 4129421' '' "$DESCR"
insertinstalledpackage 'foo' 'all' '1.0'
setupaptarchive
@@ -53,6 +54,17 @@ APT-Sources: file:$APTARCHIVE unstable/main amd64 Packages
Description: Some description
That has multiple lines
" apt show bar:amd64
+testsuccessequal "Package: big:amd64
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 4229 MB
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main amd64 Packages
+Description: Some description
+ That has multiple lines
+" apt show big:amd64
# this is the default, but disabled by the testcases
testsuccess apt show foo -o Apt::Cmd::Disable-Script-Warning=0