summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2014-07-07 17:19:29 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2014-07-07 17:19:29 +0200
commit4ea471ecb013d188d03a5c3efb9b21e58ef56065 (patch)
tree1c7ad95f43687e2e79b75ba3861f53ae34e9796b
parent01daf7042c917b9f50918d55b9d0b7806c41b957 (diff)
downloadapt-4ea471ecb013d188d03a5c3efb9b21e58ef56065.tar.gz
handle moved mmap after UniqFindTagWrite call
A call to UniqFindTagWrite can trigger the need for a bigger mmap, which is usually done by moving it, but with this move all pointers into it become invalid (and have to be remapped). The compiler calculates the pointer before the execution of the call though, so it tries to store the returned value at the old location, resulting in a segfault. We solve this by use of a temprorary variable as we did in the other instances of this problem before. Closes: #753941
-rw-r--r--apt-pkg/deb/deblistparser.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index a1bcfb71..02b9cb23 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -145,7 +145,8 @@ unsigned char debListParser::ParseMultiArch(bool const showErrors) /*{{{*/
bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
{
// Parse the section
- Ver->Section = UniqFindTagWrite("Section");
+ unsigned long const idxSection = UniqFindTagWrite("Section");
+ Ver->Section = idxSection;
Ver->MultiArch = ParseMultiArch(true);
// Archive Size
Ver->Size = Section.FindULL("Size");
@@ -260,7 +261,10 @@ bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver)
{
if (Pkg->Section == 0)
- Pkg->Section = UniqFindTagWrite("Section");
+ {
+ unsigned long const idxSection = UniqFindTagWrite("Section");
+ Pkg->Section = idxSection;
+ }
string const static myArch = _config->Find("APT::Architecture");
// Possible values are: "all", "native", "installed" and "none"