[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#787067: marked as done (jessie-pu: package apt/1.0.9.8)



Your message dated Sat, 05 Sep 2015 14:31:07 +0100
with message-id <1441459867.2151.32.camel@adam-barratt.org.uk>
and subject line Closing p-u bugs for 8.2
has caused the Debian Bug report #787067,
regarding jessie-pu: package apt/1.0.9.8
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
787067: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=787067
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
User: release.debian.org@packages.debian.org
Usertags: pu
Tags: jessie
Severity: normal

Dear stable release managers,

I would like to ask for a p-u upload for apt. The following
bugs will be fixed with that upload:

  * parse specific-arch dependencies correctly on single-arch systems
    (Closes: 777760)
  * remove "first package seen is native package" assumption.
    Thanks to Axel Beckert for testing (Closes: 782777)
  * Fix endless loop in apt-get update that can cause disk
    fillup (LP: #1445239)

The code diff is attached. The fixes were also uploaded to sid some
days ago.

Thanks for your consideration,
 David & Michael

-- System Information:
Debian Release: jessie/sid
  APT prefers unstable
    APT policy: (500, 'unstable')
    Architecture: amd64 (x86_64)
    
diff -Nru apt-1.0.9.8/apt-pkg/pkgcache.cc apt-1.0.9.8.1/apt-pkg/pkgcache.cc
--- apt-1.0.9.8/apt-pkg/pkgcache.cc	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/apt-pkg/pkgcache.cc	2015-05-28 11:08:42.000000000 +0200
@@ -230,12 +230,7 @@
 pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) {
 	size_t const found = Name.find(':');
 	if (found == string::npos)
-	{
-		if (MultiArchCache() == false)
-			return SingleArchFindPkg(Name);
-		else
-			return FindPkg(Name, "native");
-	}
+	   return FindPkg(Name, "native");
 	string const Arch = Name.substr(found+1);
 	/* Beware: This is specialcased to handle pkg:any in dependencies as
 	   these are linked to virtual pkg:any named packages with all archs.
@@ -249,13 +244,6 @@
 // ---------------------------------------------------------------------
 /* Returns 0 on error, pointer to the package otherwise */
 pkgCache::PkgIterator pkgCache::FindPkg(const string &Name, string const &Arch) {
-	if (MultiArchCache() == false && Arch != "none") {
-		if (Arch == "native" || Arch == "all" || Arch == "any" ||
-		    Arch == NativeArch())
-			return SingleArchFindPkg(Name);
-		else
-			return PkgIterator(*this,0);
-	}
 	/* We make a detour via the GrpIterator here as
 	   on a multi-arch environment a group is easier to
 	   find than a package (less entries in the buckets) */
diff -Nru apt-1.0.9.8/apt-pkg/pkgcache.h apt-1.0.9.8.1/apt-pkg/pkgcache.h
--- apt-1.0.9.8/apt-pkg/pkgcache.h	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/apt-pkg/pkgcache.h	2015-05-28 11:08:42.000000000 +0200
@@ -218,7 +218,7 @@
 
 private:
    bool MultiArchEnabled;
-   PkgIterator SingleArchFindPkg(const std::string &Name);
+   APT_DEPRECATED PkgIterator SingleArchFindPkg(const std::string &Name);
 };
 									/*}}}*/
 // Header structure							/*{{{*/
diff -Nru apt-1.0.9.8/configure apt-1.0.9.8.1/configure
--- apt-1.0.9.8/configure	2015-04-13 18:47:50.000000000 +0200
+++ apt-1.0.9.8.1/configure	2015-05-28 11:10:56.000000000 +0200
@@ -2436,7 +2436,7 @@
 
 
 PACKAGE="apt"
-PACKAGE_VERSION="1.0.9.8"
+PACKAGE_VERSION="1.0.9.8.1"
 PACKAGE_MAIL="APT Development Team <deity@lists.debian.org>"
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE "$PACKAGE"
diff -Nru apt-1.0.9.8/configure.ac apt-1.0.9.8.1/configure.ac
--- apt-1.0.9.8/configure.ac	2015-04-13 18:47:48.000000000 +0200
+++ apt-1.0.9.8.1/configure.ac	2015-05-28 11:10:55.000000000 +0200
@@ -18,7 +18,7 @@
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 PACKAGE="apt"
-PACKAGE_VERSION="1.0.9.8"
+PACKAGE_VERSION="1.0.9.8.1"
 PACKAGE_MAIL="APT Development Team <deity@lists.debian.org>"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE_VERSION,"$PACKAGE_VERSION")
diff -Nru apt-1.0.9.8/debian/changelog apt-1.0.9.8.1/debian/changelog
--- apt-1.0.9.8/debian/changelog	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/debian/changelog	2015-05-28 11:08:42.000000000 +0200
@@ -1,3 +1,16 @@
+apt (1.0.9.8.1) stable; urgency=medium
+
+  [ Michael Vogt ]
+  * Fix endless loop in apt-get update that can cause disk fillup (LP: #1445239)
+
+  [ David Kalnischkies ]
+  * parse specific-arch dependencies correctly on single-arch systems
+    (Closes: 777760)
+  * remove "first package seen is native package" assumption.
+    Thanks to Axel Beckert for testing (Closes: 782777)
+
+ -- Michael Vogt <mvo@debian.org>  Thu, 28 May 2015 11:07:45 +0200
+
 apt (1.0.9.8) unstable; urgency=medium
 
   [ David Kalnischkies ]
diff -Nru apt-1.0.9.8/debian/gbp.conf apt-1.0.9.8.1/debian/gbp.conf
--- apt-1.0.9.8/debian/gbp.conf	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/debian/gbp.conf	2015-05-28 11:08:42.000000000 +0200
@@ -1,7 +1,7 @@
 [DEFAULT]
 prebuild = ./prepare-release pre-export
 postbuild = ./prepare-release post-build
-debian-branch = debian/sid
+debian-branch = debian/jessie
 debian-tag = %(version)s
 export-dir = ../build-area
-sign-tags = True
\ No newline at end of file
+sign-tags = True
diff -Nru apt-1.0.9.8/doc/apt-verbatim.ent apt-1.0.9.8.1/doc/apt-verbatim.ent
--- apt-1.0.9.8/doc/apt-verbatim.ent	2015-04-13 18:47:48.000000000 +0200
+++ apt-1.0.9.8.1/doc/apt-verbatim.ent	2015-05-28 11:10:55.000000000 +0200
@@ -225,7 +225,7 @@
 ">
 
 <!-- this will be updated by 'prepare-release' -->
-<!ENTITY apt-product-version "1.0.9.8">
+<!ENTITY apt-product-version "1.0.9.8.1">
 
 <!-- (Code)names for various things used all over the place -->
 <!ENTITY oldstable-codename "wheezy">
diff -Nru apt-1.0.9.8/methods/http.cc apt-1.0.9.8.1/methods/http.cc
--- apt-1.0.9.8/methods/http.cc	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/methods/http.cc	2015-05-28 11:08:42.000000000 +0200
@@ -443,7 +443,7 @@
       else if (JunkSize != 0)
 	 In.Limit(JunkSize);
       else
-	 In.Limit(Size - StartPos);
+	 In.Limit(DownloadSize);
       
       // Just transfer the whole block.
       do
diff -Nru apt-1.0.9.8/methods/server.cc apt-1.0.9.8.1/methods/server.cc
--- apt-1.0.9.8/methods/server.cc	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/methods/server.cc	2015-05-28 11:08:42.000000000 +0200
@@ -164,15 +164,22 @@
 	 Encoding = Stream;
       HaveContent = true;
 
-      unsigned long long * SizePtr = &Size;
+      unsigned long long * DownloadSizePtr = &DownloadSize;
       if (Result == 416)
-	 SizePtr = &JunkSize;
+	 DownloadSizePtr = &JunkSize;
 
-      *SizePtr = strtoull(Val.c_str(), NULL, 10);
-      if (*SizePtr >= std::numeric_limits<unsigned long long>::max())
+      *DownloadSizePtr = strtoull(Val.c_str(), NULL, 10);
+      if (*DownloadSizePtr >= std::numeric_limits<unsigned long long>::max())
 	 return _error->Errno("HeaderLine", _("The HTTP server sent an invalid Content-Length header"));
-      else if (*SizePtr == 0)
+      else if (*DownloadSizePtr == 0)
 	 HaveContent = false;
+
+      // On partial content (206) the Content-Length less than the real
+      // size, so do not set it here but leave that to the Content-Range
+      // header instead
+      if(Result != 206 && Size == 0)
+         Size = DownloadSize;
+
       return true;
    }
 
@@ -193,6 +200,9 @@
 	 return _error->Error(_("The HTTP server sent an invalid Content-Range header"));
       if ((unsigned long long)StartPos > Size)
 	 return _error->Error(_("This HTTP server has broken range support"));
+
+      // figure out what we will download
+      DownloadSize = Size - StartPos;
       return true;
    }
 
diff -Nru apt-1.0.9.8/methods/server.h apt-1.0.9.8.1/methods/server.h
--- apt-1.0.9.8/methods/server.h	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/methods/server.h	2015-05-28 11:08:42.000000000 +0200
@@ -34,7 +34,8 @@
    char Code[360];
 
    // These are some statistics from the last parsed header lines
-   unsigned long long Size; // size of the usable content (aka: the file)
+   unsigned long long Size; // total size of the usable content (aka: the file)
+   unsigned long long DownloadSize; // size we actually download (can be smaller than Size if we have partial content)
    unsigned long long JunkSize; // size of junk content (aka: server error pages)
    unsigned long long StartPos;
    time_t Date;
diff -Nru apt-1.0.9.8/test/integration/test-bug-782777-single-arch-weirdness apt-1.0.9.8.1/test/integration/test-bug-782777-single-arch-weirdness
--- apt-1.0.9.8/test/integration/test-bug-782777-single-arch-weirdness	1970-01-01 01:00:00.000000000 +0100
+++ apt-1.0.9.8.1/test/integration/test-bug-782777-single-arch-weirdness	2015-05-28 11:08:42.000000000 +0200
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Ensure that the order in which packages are in the binary cache
+# does not effect if they can be found or not
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'abar' 'i386' '1'
+insertpackage 'unstable' 'foobar' 'i386' '1' 'Depends: abar:amd64, zfoo:amd64'
+insertpackage 'unstable' 'zfoo' 'i386' '1'
+
+setupaptarchive
+
+testrun() {
+	rm -f rootdir/var/lib/apt/extended_states
+
+	testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  abar zfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst abar (1 unstable [i386])
+Inst zfoo (1 unstable [i386])
+Conf abar (1 unstable [i386])
+Conf zfoo (1 unstable [i386])' aptget install abar zfoo -s
+
+	testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  abar zfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst abar (1 unstable [i386])
+Inst zfoo (1 unstable [i386])
+Conf abar (1 unstable [i386])
+Conf zfoo (1 unstable [i386])' aptget install abar:i386 zfoo:i386 -s
+
+	testequal "Reading package lists...
+Building dependency tree...
+Package abar:amd64 is not available, but is referred to by another package.
+This may mean that the package is missing, has been obsoleted, or
+is only available from another source
+
+Package zfoo:amd64 is not available, but is referred to by another package.
+This may mean that the package is missing, has been obsoleted, or
+is only available from another source
+
+E: Package 'abar:amd64' has no installation candidate
+E: Package 'zfoo:amd64' has no installation candidate" aptget install abar:amd64 zfoo:amd64 -s
+
+	cp -f rootdir/var/lib/dpkg/status status.backup
+	insertinstalledpackage 'abar' 'i386' '1'
+	insertinstalledpackage 'zfoo' 'i386' '1'
+
+	testequal 'abar
+zfoo' aptmark showmanual abar zfoo
+	testequal 'abar set to automatically installed.
+zfoo set to automatically installed.' aptmark auto abar zfoo
+	testempty aptmark showmanual abar zfoo
+	testequal 'abar
+zfoo' aptmark showauto abar zfoo
+
+	mv -f status.backup rootdir/var/lib/dpkg/status
+}
+
+msgmsg 'Single-Arch testrun'
+testrun
+msgmsg 'Multi-Arch testrun'
+configarchitecture 'i386' 'amd64'
+testrun
diff -Nru apt-1.0.9.8/test/integration/test-bug-lp1445239-download-loop apt-1.0.9.8.1/test/integration/test-bug-lp1445239-download-loop
--- apt-1.0.9.8/test/integration/test-bug-lp1445239-download-loop	1970-01-01 01:00:00.000000000 +0100
+++ apt-1.0.9.8.1/test/integration/test-bug-lp1445239-download-loop	2015-05-28 11:08:42.000000000 +0200
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# this is a regression test for LP: #1445239 where a partial download can
+# trigger an endless hang of the download method
+#
+
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64'
+
+changetowebserver
+webserverconfig 'aptwebserver::support::range' 'true'
+
+TESTFILE='aptarchive/testfile'
+dd if=/dev/zero of=$TESTFILE bs=100k count=1 2>/dev/null
+
+DOWNLOADLOG='rootdir/tmp/testdownloadfile.log'
+
+TARGET=testfile-downloaded
+dd if=/dev/zero of=$TARGET bs=99k count=1 2>/dev/null
+if ! downloadfile http://localhost:8080/testfile "$TARGET" > "$DOWNLOADLOG"; then
+    cat >&2 "$DOWNLOADLOG"
+    msgfail
+else
+    msgpass
+fi
diff -Nru apt-1.0.9.8/test/interactive-helper/aptwebserver.cc apt-1.0.9.8.1/test/interactive-helper/aptwebserver.cc
--- apt-1.0.9.8/test/interactive-helper/aptwebserver.cc	2015-04-13 07:25:06.000000000 +0200
+++ apt-1.0.9.8.1/test/interactive-helper/aptwebserver.cc	2015-05-28 11:08:42.000000000 +0200
@@ -654,13 +654,15 @@
 		     if (filesize > filestart)
 		     {
 			data.Skip(filestart);
-			std::ostringstream contentlength;
-			contentlength << "Content-Length: " << (filesize - filestart);
-			headers.push_back(contentlength.str());
+                        // make sure to send content-range before conent-length
+                        // as regression test for LP: #1445239
 			std::ostringstream contentrange;
 			contentrange << "Content-Range: bytes " << filestart << "-"
 			   << filesize - 1 << "/" << filesize;
 			headers.push_back(contentrange.str());
+			std::ostringstream contentlength;
+			contentlength << "Content-Length: " << (filesize - filestart);
+			headers.push_back(contentlength.str());
 			sendHead(client, 206, headers);
 			if (sendContent == true)
 			   sendFile(client, headers, data);

--- End Message ---
--- Begin Message ---
Version: 8.2

Hi,

These bugs correspond to updates which were included in the 8.2 point
release.

Regards,

Adam

--- End Message ---

Reply to: