]> git.saurik.com Git - apt.git/commitdiff
Merge branch 'debian/sid' into debian/experimental
authorMichael Vogt <mvo@debian.org>
Tue, 14 Oct 2014 07:57:34 +0000 (09:57 +0200)
committerMichael Vogt <mvo@debian.org>
Tue, 14 Oct 2014 07:57:34 +0000 (09:57 +0200)
1  2 
apt-pkg/deb/deblistparser.cc
debian/changelog

index 502bd1a5132d887369517351a3b3e0e61e0da3a5,4eef66c2b7bd1d0c736e69e2bbd6987990c6c23f..616d8296d932b6ea5053df897abae979c9c511e5
@@@ -58,6 -58,18 +58,6 @@@ debListParser::debListParser(FileFd *Fi
     MultiArchEnabled = Architectures.size() > 1;
  }
                                                                        /*}}}*/
 -// ListParser::UniqFindTagWrite - Find the tag and write a unq string /*{{{*/
 -// ---------------------------------------------------------------------
 -/* */
 -unsigned long debListParser::UniqFindTagWrite(const char *Tag)
 -{
 -   const char *Start;
 -   const char *Stop;
 -   if (Section.Find(Tag,Start,Stop) == false)
 -      return 0;
 -   return WriteUniqString(Start,Stop - Start);
 -}
 -                                                                      /*}}}*/
  // ListParser::Package - Return the package name                      /*{{{*/
  // ---------------------------------------------------------------------
  /* This is to return the name of the package this section describes */
@@@ -132,67 -144,9 +132,67 @@@ unsigned char debListParser::ParseMulti
  /* */
  bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
  {
 +   const char *Start;
 +   const char *Stop;
 +
     // Parse the section
 -   unsigned long const idxSection = UniqFindTagWrite("Section");
 -   Ver->Section = idxSection;
 +   if (Section.Find("Section",Start,Stop) == true)
 +   {
 +      map_stringitem_t const idx = StoreString(pkgCacheGenerator::SECTION, Start, Stop - Start);
 +      Ver->Section = idx;
 +   }
 +   // Parse the source package name
 +   pkgCache::GrpIterator const G = Ver.ParentPkg().Group();
 +   Ver->SourcePkgName = G->Name;
 +   Ver->SourceVerStr = Ver->VerStr;
 +   if (Section.Find("Source",Start,Stop) == true)
 +   {
 +      const char * const Space = (const char * const) memchr(Start, ' ', Stop - Start);
 +      pkgCache::VerIterator V;
 +
 +      if (Space != NULL)
 +      {
 +       Stop = Space;
 +       const char * const Open = (const char * const) memchr(Space, '(', Stop - Space);
 +       if (likely(Open != NULL))
 +       {
 +          const char * const Close = (const char * const) memchr(Open, ')', Stop - Open);
 +          if (likely(Close != NULL))
 +          {
 +             std::string const version(Open + 1, (Close - Open) - 1);
 +             if (version != Ver.VerStr())
 +             {
 +                map_stringitem_t const idx = StoreString(pkgCacheGenerator::VERSIONNUMBER, version);
 +                Ver->SourceVerStr = idx;
 +             }
 +          }
 +       }
 +      }
 +
 +      std::string const pkgname(Start, Stop - Start);
 +      if (pkgname != G.Name())
 +      {
 +       for (pkgCache::PkgIterator P = G.PackageList(); P.end() == false; P = G.NextPkg(P))
 +       {
 +          for (V = P.VersionList(); V.end() == false; ++V)
 +          {
 +             if (pkgname == V.SourcePkgName())
 +             {
 +                Ver->SourcePkgName = V->SourcePkgName;
 +                break;
 +             }
 +          }
 +          if (V.end() == false)
 +             break;
 +       }
 +       if (V.end() == true)
 +       {
 +          map_stringitem_t const idx = StoreString(pkgCacheGenerator::PKGNAME, pkgname);
 +          Ver->SourcePkgName = idx;
 +       }
 +      }
 +   }
 +
     Ver->MultiArch = ParseMultiArch(true);
     // Archive Size
     Ver->Size = Section.FindULL("Size");
     Ver->InstalledSize *= 1024;
  
     // Priority
 -   const char *Start;
 -   const char *Stop;
     if (Section.Find("Priority",Start,Stop) == true)
 -   {      
 +   {
        if (GrabWord(string(Start,Stop-Start),PrioList,Ver->Priority) == false)
         Ver->Priority = pkgCache::State::Extra;
     }
  /* This is to return the string describing the package in debian
     form. If this returns the blank string then the entry is assumed to
     only describe package properties */
 -string debListParser::Description()
 +string debListParser::Description(std::string const &lang)
  {
 -   string const lang = DescriptionLanguage();
     if (lang.empty())
        return Section.FindS("Description");
     else
        return Section.FindS(string("Description-").append(lang).c_str());
  }
 -                                                                        /*}}}*/
 -// ListParser::DescriptionLanguage - Return the description lang string       /*{{{*/
 -// ---------------------------------------------------------------------
 -/* This is to return the string describing the language of
 -   description. If this returns the blank string then the entry is
 -   assumed to describe original description. */
 -string debListParser::DescriptionLanguage()
 +                                                                      /*}}}*/
 +// ListParser::AvailableDescriptionLanguages                          /*{{{*/
 +std::vector<std::string> debListParser::AvailableDescriptionLanguages()
  {
 -   if (Section.FindS("Description").empty() == false)
 -      return "";
 -
 -   std::vector<string> const lang = APT::Configuration::getLanguages(true);
 -   for (std::vector<string>::const_iterator l = lang.begin();
 -      l != lang.end(); ++l)
 -      if (Section.FindS(string("Description-").append(*l).c_str()).empty() == false)
 -       return *l;
 -
 -   return "";
 +   std::vector<std::string> const understood = APT::Configuration::getLanguages();
 +   std::vector<std::string> avail;
 +   if (Section.Exists("Description") == true)
 +      avail.push_back("");
 +   for (std::vector<std::string>::const_iterator lang = understood.begin(); lang != understood.end(); ++lang)
 +   {
 +      std::string const tagname = "Description-" + *lang;
 +      if (Section.Exists(tagname.c_str()) == true)
 +       avail.push_back(*lang);
 +   }
 +   return avail;
  }
 -                                                                        /*}}}*/
 -// ListParser::Description - Return the description_md5 MD5SumValue   /*{{{*/
 +                                                                      /*}}}*/
 +// ListParser::Description_md5 - Return the description_md5 MD5SumValue       /*{{{*/
  // ---------------------------------------------------------------------
  /* This is to return the md5 string to allow the check if it is the right
     description. If no Description-md5 is found in the section it will be
@@@ -274,7 -234,7 +274,7 @@@ MD5SumValue debListParser::Description_
     string const value = Section.FindS("Description-md5");
     if (value.empty() == true)
     {
 -      std::string const desc = Description() + "\n";
 +      std::string const desc = Description("") + "\n";
        if (desc == "\n")
         return MD5SumValue();
  
  bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
                               pkgCache::VerIterator &Ver)
  {
 -   if (Pkg->Section == 0)
 -   {
 -      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"
     // The "installed" mode is handled by ParseStatus(), See #544481 and friends.
@@@ -372,13 -338,9 +372,9 @@@ unsigned short debListParser::VersionHa
  /* Status lines are of the form,
       Status: want flag status
     want = unknown, install, hold, deinstall, purge
-    flag = ok, reinstreq, hold, hold-reinstreq
-    status = not-installed, unpacked, half-configured,
-             half-installed, config-files, post-inst-failed, 
-             removal-failed, installed
-    
-    Some of the above are obsolete (I think?) flag = hold-* and 
-    status = post-inst-failed, removal-failed at least.
+    flag = ok, reinstreq
+    status = not-installed, config-files, half-installed, unpacked,
+             half-configured, triggers-awaited, triggers-pending, installed
   */
  bool debListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
                                pkgCache::VerIterator &Ver)
  
     // Process the flag field
     WordList StatusList[] = {{"not-installed",pkgCache::State::NotInstalled},
+                             {"config-files",pkgCache::State::ConfigFiles},
+                             {"half-installed",pkgCache::State::HalfInstalled},
                              {"unpacked",pkgCache::State::UnPacked},
                              {"half-configured",pkgCache::State::HalfConfigured},
-                             {"installed",pkgCache::State::Installed},
-                             {"half-installed",pkgCache::State::HalfInstalled},
-                             {"config-files",pkgCache::State::ConfigFiles},
                              {"triggers-awaited",pkgCache::State::TriggersAwaited},
                              {"triggers-pending",pkgCache::State::TriggersPending},
-                             {"post-inst-failed",pkgCache::State::HalfConfigured},
-                             {"removal-failed",pkgCache::State::HalfInstalled},
+                             {"installed",pkgCache::State::Installed},
                              {NULL, 0}};
     if (GrabWord(string(Start,I-Start),StatusList,Pkg->CurrentState) == false)
        return _error->Error("Malformed 3rd word in the Status line");
@@@ -669,72 -629,94 +663,94 @@@ const char *debListParser::ParseDepends
  
     if (ParseRestrictionsList == true)
     {
-       // Parse a restrictions list
-       if (I != Stop && *I == '<')
+       // Parse a restrictions formula which is in disjunctive normal form:
+       // (foo AND bar) OR (blub AND bla)
+       std::vector<string> const profiles = APT::Configuration::getBuildProfiles();
+       // if the next character is a restriction list, then by default the
+       // dependency does not apply and the conditions have to be checked
+       // if the next character is not a restriction list, then by default the
+       // dependency applies
+       bool applies1 = (*I != '<');
+       while (I != Stop)
        {
+        if (*I != '<')
+            break;
         ++I;
         // malformed
         if (unlikely(I == Stop))
            return 0;
  
-        std::vector<string> const profiles = APT::Configuration::getBuildProfiles();
         const char *End = I;
-        bool Found = false;
-        bool NegRestriction = false;
-        while (I != Stop)
-        {
-           // look for whitespace or ending '>'
-           for (;End != Stop && !isspace(*End) && *End != '>'; ++End);
-           if (unlikely(End == Stop))
-              return 0;
  
-           if (*I == '!')
+        // if of the prior restriction list is already fulfilled, then
+        // we can just skip to the end of the current list
+        if (applies1) {
+           for (;End != Stop && *End != '>'; ++End);
+           I = ++End;
+           // skip whitespace
+           for (;I != Stop && isspace(*I) != 0; I++);
+        } else {
+           bool applies2 = true;
+           // all the conditions inside a restriction list have to be
+           // met so once we find one that is not met, we can skip to
+           // the end of this list
+           while (I != Stop)
            {
-              NegRestriction = true;
-              ++I;
-           }
+              // look for whitespace or ending '>'
+              // End now points to the character after the current term
+              for (;End != Stop && !isspace(*End) && *End != '>'; ++End);
  
-           std::string restriction(I, End);
+              if (unlikely(End == Stop))
+                 return 0;
  
-           std::string prefix = "profile.";
-           // only support for "profile" prefix, ignore others
-           if (restriction.size() > prefix.size() &&
-                 restriction.substr(0, prefix.size()) == prefix)
-           {
-              // get the name of the profile
-              restriction = restriction.substr(prefix.size());
+              bool NegRestriction = false;
+              if (*I == '!')
+              {
+                 NegRestriction = true;
+                 ++I;
+              }
+              std::string restriction(I, End);
  
               if (restriction.empty() == false && profiles.empty() == false &&
-                    std::find(profiles.begin(), profiles.end(), restriction) != profiles.end())
+                 std::find(profiles.begin(), profiles.end(), restriction) != profiles.end())
               {
-                 Found = true;
-                 if (I[-1] != '!')
-                    NegRestriction = false;
-                 // we found a match, so fast-forward to the end of the wildcards
-                 for (; End != Stop && *End != '>'; ++End);
+                 if (NegRestriction) {
+                    applies2 = false;
+                    // since one of the terms does not apply we don't have to check the others
+                    for (; End != Stop && *End != '>'; ++End);
+                 }
+              } else {
+                 if (!NegRestriction) {
+                    applies2 = false;
+                    // since one of the terms does not apply we don't have to check the others
+                    for (; End != Stop && *End != '>'; ++End);
+                 }
+              }
+              if (*End++ == '>') {
+                 I = End;
+                 // skip whitespace
+                 for (;I != Stop && isspace(*I) != 0; I++);
+                 break;
               }
-           }
  
-           if (*End++ == '>') {
               I = End;
-              break;
+              // skip whitespace
+              for (;I != Stop && isspace(*I) != 0; I++);
+           }
+           if (applies2) {
+              applies1 = true;
            }
-           I = End;
-           for (;I != Stop && isspace(*I) != 0; I++);
         }
-        if (NegRestriction == true)
-           Found = !Found;
-        if (Found == false)
-           Package = ""; /* not for this restriction */
        }
  
-       // Skip whitespace
-       for (;I != Stop && isspace(*I) != 0; I++);
+       if (applies1 == false) {
+        Package = ""; //not for this restriction
+       }
     }
  
     if (I != Stop && *I == '|')
@@@ -935,7 -917,7 +951,7 @@@ bool debListParser::LoadReleaseInfo(pkg
  {
     // apt-secure does no longer download individual (per-section) Release
     // file. to provide Component pinning we use the section name now
 -   map_ptrloc const storage = WriteUniqString(component);
 +   map_stringitem_t const storage = StoreString(pkgCacheGenerator::MIXED, component);
     FileI->Component = storage;
  
     pkgTagFile TagFile(&File, File.Size());
        return false;
  
     std::string data;
 -   #define APT_INRELEASE(TAG, STORE) \
 +   #define APT_INRELEASE(TYPE, TAG, STORE) \
     data = Section.FindS(TAG); \
     if (data.empty() == false) \
     { \
 -      map_ptrloc const storage = WriteUniqString(data); \
 +      map_stringitem_t const storage = StoreString(pkgCacheGenerator::TYPE, data); \
        STORE = storage; \
     }
 -   APT_INRELEASE("Suite", FileI->Archive)
 -   APT_INRELEASE("Component", FileI->Component)
 -   APT_INRELEASE("Version", FileI->Version)
 -   APT_INRELEASE("Origin", FileI->Origin)
 -   APT_INRELEASE("Codename", FileI->Codename)
 -   APT_INRELEASE("Label", FileI->Label)
 +   APT_INRELEASE(MIXED, "Suite", FileI->Archive)
 +   APT_INRELEASE(MIXED, "Component", FileI->Component)
 +   APT_INRELEASE(VERSIONNUMBER, "Version", FileI->Version)
 +   APT_INRELEASE(MIXED, "Origin", FileI->Origin)
 +   APT_INRELEASE(MIXED, "Codename", FileI->Codename)
 +   APT_INRELEASE(MIXED, "Label", FileI->Label)
     #undef APT_INRELEASE
     Section.FindFlag("NotAutomatic", FileI->Flags, pkgCache::Flag::NotAutomatic);
     Section.FindFlag("ButAutomaticUpgrades", FileI->Flags, pkgCache::Flag::ButAutomaticUpgrades);
@@@ -997,22 -979,3 +1013,22 @@@ bool debListParser::SameVersion(unsigne
  }
                                                                        /*}}}*/
  #endif
 +
 +
 +debDebFileParser::debDebFileParser(FileFd *File, std::string const &DebFile)
 +   : debListParser(File, ""), DebFile(DebFile)
 +{
 +}
 +
 +bool debDebFileParser::UsePackage(pkgCache::PkgIterator &Pkg,
 +                                  pkgCache::VerIterator &Ver)
 +{
 +   bool res = debListParser::UsePackage(Pkg, Ver);
 +   // we use the full file path as a provides so that the file is found
 +   // by its name
 +   if(NewProvidesAllArch(Ver, DebFile, Ver.VerStr()) == false)
 +      return false;
 +   return res;
 +}
 +
 +debListParser::~debListParser() {}
diff --combined debian/changelog
index 2cbfec869f0fc0002374d95bffc8b4f15d80abea,3896c05315ead2ad671e5d8115c754a81fc2fb0c..c268f9bb95e4b3698202b3bd01621657d1fb09aa
 +apt (1.1~exp5) experimental; urgency=medium
 +
 +  [ Michael Vogt ]
 +  * Only rename StatError files in AbortTransaction()
 +  * Document Acquire{MaxReleaseFileSize,AllowInsecureRepositories,
 +    AllowDowngradeToInsecureRepositories} and
 +    --no-allow-insecure-repositories
 +  * Fix backward compatiblity of the new pkgAcquireMethod::DropPrivsOrDie()
 +  * Change default of Acquire::AllowInsecureRepositories to "true"
 +    so that this change is less disruptive, this will be switched
 +    to "false" again after jessie
 +
 +  [ David Kalnischkies ]
 +  * remove useless pdiff filename output (Closes: 764737)
 +  * make --allow-insecure-repositories message an error
 +  * display a warning for unsigned repos
 +  * trusted=yes sources are secure, we just don't know why
 +
 + -- Michael Vogt <mvo@debian.org>  Mon, 13 Oct 2014 16:15:22 +0200
 +
 +apt (1.1~exp4) experimental; urgency=medium
 +
 +  [ Michael Vogt ]
 +  * Merge sid version 1.0.9.2
 +  * feature/acq-trans:
 +    - Make apt-get update more transactional by keeping all data from
 +      a sources.list line in partial/ until all data is good and only
 +      then move it into lists/ in one step
 +    - add new -o Debug::Acquire::Transaction=1 debug option
 +  * feature/expected-size:
 +    Do not download more data in the mehotds than expected if we know
 +    the size. For the InRelease/Release/Release.gpg add new 
 +    Acquire::MaxReleaseFileSize that defaults to 10Mb for now
 +  * Verify the the hashes of the downloaded compressed files early
 +  * Only load unauthenticated data into our parsers when the user
 +    explicitly asked for it via --allow-insecure-repositories
 +    (Acquire::AllowInsecureRepositories)
 +  * Print warning when trying to use unauthenticated repositories
 +  * Use /var/empty as the homedir for _apt
 +  * Revert making pkgAcquire::Item::DescURI() "const" to not break
 +    API
 +  * Do not allow going from a authenticated to unauthenticated repository
 +  * Add missing "adduser" dependency (for the new _apt user)
 +    Thanks to Russ Allbery (Closes: #763004)
 +  * Test if TMPDIR is a directory in apt-key and if not unset it
 +  * add early verification for the .diff/Index download
 +  * Bump library version to libapt-pkg4.14
 +  * Rework pkgAcqMeta{Index,Sig,ClearSig}::{Done,Failed]() for readability
 +  * Ignore EINVAL from prctl(PR_SET_NO_NEW_PRIVS) (closes: 764066)
 +
 +  [ David Kalnischkies ]
 +  * deprecate Pkg->Name in favor of Grp->Name
 +  * drop stored StringItems in favor of in-memory mappings
 +  * de-duplicate version strings in the cache
 +  * fix progress output for (dist-)upgrade calculation
 +  * move PCI::From* methods into CacheSetHelper class (Closes: 686221)
 +  * add a (hidden) --quiet option for apt-key
 +  * only create new trusted.gpg if directory is writeable
 +  * support (multiple) arguments properly in apt-key
 +  * set a primary-keyring only if we have access to it
 +  * merge fragment keyrings in apt-key to avoid hitting gpg limits
 +    (Closes: 733028)
 +  * use apt-key adv (+ gnupg) instead of gpgv for verify
 +  * support gnupg2 as drop-in replacement for gnupg
 +  * allow to specify fingerprints in 'apt-key del'
 +  * use only one --keyring in gpg interactions
 +  * add and use 'apt-key verify' which prefers gpgv over gpg
 +  * remove empty keyrings in trusted.gpg.d on upgrade
 +  * store source name and version in binary cache
 +  * allow fetcher setup without directory creation (Closes: 762898)
 +  * cleanup partial directory of lists in apt-get clean (Closes: #762889)
 +  * allow options between command and -- on commandline
 +  * update symbols file
 +  * support parsing of all hashes for pdiff
 +  * ensure world-readability for trusted.gpg in postinst (Closes: 647001)
 +  * ensure partial dirs are 0700 and owned by _apt:root
 +  * use _apt:root only for partial directories
 +  * display errortext for all Err
 +  * set PR_SET_NO_NEW_PRIVS also if run as non-root
 +
 +  [ James McCoy ]
 +  * ensure apt-key del handles 16-byte key ids (Closes: 754436)
 +
 +  [ Kenshi Muto ]
 +  * Japanese program translation update (Closes: 763033)
 +
 +  [ Trần Ngọc Quân ]
 +  * Set STRIP_FROM_PATH for doxygen
 +
 +  [ Mert Dirik ]
 +  * Turkish program translation update (Closes: 763379)
 +
 +  [ Guillem Jover ]
 +  * apt-get: Create the temporary downloaded changelog inside tmpdir
 +
 +  [ Miroslav Kure ]
 +  * [l10n] Updated Czech translation of apt (Closes: #764055)
 +
 + -- Michael Vogt <mvo@ubuntu.com>  Wed, 08 Oct 2014 09:37:35 +0200
 +
 +apt (1.1~exp3) experimental; urgency=medium
 +
 +  [ Michael Vogt ]
 +  * merged changes from debian/sid up to 1.0.9.1
 +  * Make /var/lib/apt/lists and /var/cache/apt/archives owned
 +    by the new _apt user
 +  * Drop Privileges in the following acquire methods:
 +     copy, http, https, ftp, gpgv, gzip/bzip2/lzma/xz 
 +  * DropPrivs: Improvements based on feedback from error@debian.org
 +
 +  [ Julian Andres Klode ]
 +  * DropPriv: Really call seteuid and not setuid, and add more checks
 +  * Use _apt as our unprivileged user name
 +  * DropPrivs: Also check for saved set-user-ID and set-group-ID
 +  * methods: Fail if we cannot drop privileges
 +  * DropPrivs: Also check for saved set-user-ID and set-group-ID
 +
 + -- Michael Vogt <mvo@debian.org>  Wed, 24 Sep 2014 22:30:09 +0200
 +
 +apt (1.1~exp2) experimental; urgency=medium
 +
 +  [ Guillem Jover ]
 +  * Add new Base256ToNum long long overload function
 +  * Fix ar and tar code to be LFS-safe (Closes: #742882)
 +
 +  [ Michael Vogt ]
 +  * increase libapt-inst to version 1.6
 +  * Only allow "apt-get build-dep path" when path starts with ./ or /
 +  * Allow passing a full path to apt-get install /foo/bar.deb (CLoses: #752327)
 +  * merge changes from the 1.0.6 upload
 +
 + -- Michael Vogt <mvo@debian.org>  Thu, 10 Jul 2014 13:18:08 +0200
 +
 +apt (1.1~exp1) experimental; urgency=low
 +
 +  [ David Kalnischkies ]
 +  * [API Break] change "std::string pkgAcquire::Item::DescURI()" to
 +                       "std::string pkgAcquire::Item::DescURI() const"
 +  * [ABI-Break] increase hashtable size for packages/groups by factor 5
 +  * [ABI-Break] cleanup datatypes mix used in binary cache
 +  * [internal API-Break] remove the Section member from package struct
 +  * use 'best' hash for source authentication (LP: 1098738)
 +  * use HashStringList in the acquire system
 +  * deal with hashes in ftparchive more dynamic as well
 +  * reenable pipelining via hashsum reordering support
 +  * parse and retrieve multiple Descriptions in one record
 +  * improve pkgTagSection scanning and parsing
 +  * invalid cache if architecture set doesn't match (Closes: 745036)
 +
 +  [ Michael Vogt ]
 +  * add support for "apt-get build-dep foo.dsc"
 +  * add support for "apt-get build-dep unpacked-source-dir"
 +  * add support for "apt-get install foo_1.0_all.deb"
 +  * make "apt-get update" progress much more accurate by loading the
 +    sizes of the targets into the fetcher early
 +  * Implement simple by-hash for apt update to improve reliability of
 +    the update. Apt will try to fetch the Packages file via
 +    /by-hash/$hash_type/$hash_value if the repo supports that.
 +    - add APT::Acquire::$(host)::By-Hash=1 knob
 +    - add Acquire-By-Hash=1 to Release file
 +  * add Debug::Acquire::Progress debug option
 +  * [ABI-Break] lp:~mvo/apt/source-hashes:
 +    - use sha{512,256,1} for deb-src when available LP: #1098738
 +  * [ABI-Break] stop exporting the accidently exported parsenetrc() symbol
 +  * [ABI-Break] remove the PACKAGE_MATCHER_ABI_COMPAT defines
 +  * [ABI BREAK] apt-pkg/pkgcache.h:
 +    - adjust pkgCache::State::VerPriority enum, to match reality
 +  * test/integration/test-debsrc-hashes:
 +    - add integration test, thanks to Daniel Hartwig
 +  * [ABI-Break] remove the PACKAGE_MATCHER_ABI_COMPAT defines
 +  * [ABI-Break] Pass struct IndexTarget/indexRecords to
 +    pkgAcqIndex{,Merge}Diffs
 +  * [internal API-Break] rename pkgCache::Package::NextPackage to
 +    pkgCache::Package::Next
 +  * Calculate Percent as part of pkgAcquireStatus to provide a weighted
 +    percent for both items and bytes
 +  * apt-pkg/contrib/macros.h: bump library version to 4.13
 +  * apt-private/acqprogress.cc: do not show file size on IMSHit, it wasn't
 +    fetched
 +  * Fix warnings from clang -Wall/clang -fsanitize=address
 +  * add DropPrivs() and drop privileges to nobody when running the
 +    the buildin apt and dump solvers
 +  * lp:~mvo/apt/webserver-simulate-broken-with-fix346386:
 +    - fix invalid InRelease file download checking and add regression
 +      test to server broken files to the buildin test webserver
 +    - add regression test for LP: #34638
 +
 + -- Michael Vogt <mvo@debian.org>  Thu, 19 Jun 2014 12:01:48 +0200
 +
  apt (1.0.9.2) unstable; urgency=medium
  
    [ Michael Vogt ]
  
    [ Guillem Jover ]
    * apt-get: Create the temporary downloaded changelog inside tmpdir
-     (closes: #763780)
+     (closes: #763780) (CVE-2014-7206)
  
   -- Michael Vogt <mvo@debian.org>  Thu, 02 Oct 2014 22:05:39 +0200