]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgsystem.cc
Fix buffer overflow in debListParser::VersionHash()
[apt.git] / apt-pkg / pkgsystem.cc
index 53015022150f51f89231e7a0607607501944d6a0..b1c6cc1eaa03672769556e6cb884637501ce5d54 100644 (file)
@@ -16,6 +16,7 @@
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/macros.h>
 
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/macros.h>
 
+#include <map>
 #include <cassert>
 #include <cstring>
                                                                        /*}}}*/
 #include <cassert>
 #include <cstring>
                                                                        /*}}}*/
@@ -25,11 +26,19 @@ static pkgSystem *SysList[10];
 pkgSystem **pkgSystem::GlobalList = SysList;
 unsigned long pkgSystem::GlobalListLen = 0;
 
 pkgSystem **pkgSystem::GlobalList = SysList;
 unsigned long pkgSystem::GlobalListLen = 0;
 
+class APT_HIDDEN pkgSystemPrivate                                      /*{{{*/
+{
+public:
+   typedef decltype(pkgCache::Version::ID) idtype;
+   std::map<idtype,idtype> idmap;
+   pkgSystemPrivate() {}
+};
+                                                                       /*}}}*/
 // System::pkgSystem - Constructor                                     /*{{{*/
 // ---------------------------------------------------------------------
 /* Add it to the global list.. */
 pkgSystem::pkgSystem(char const * const label, pkgVersioningSystem * const vs) :
 // System::pkgSystem - Constructor                                     /*{{{*/
 // ---------------------------------------------------------------------
 /* Add it to the global list.. */
 pkgSystem::pkgSystem(char const * const label, pkgVersioningSystem * const vs) :
-   Label(label), VS(vs), d(NULL)
+   Label(label), VS(vs), d(new pkgSystemPrivate())
 {
    assert(GlobalListLen < sizeof(SysList)/sizeof(*SysList));
    SysList[GlobalListLen] = this;
 {
    assert(GlobalListLen < sizeof(SysList)/sizeof(*SysList));
    SysList[GlobalListLen] = this;
@@ -63,5 +72,18 @@ std::vector<std::string> pkgSystem::ArchitecturesSupported() const   /*{{{*/
    return {};
 }
                                                                        /*}}}*/
    return {};
 }
                                                                        /*}}}*/
+// pkgSystem::Set/GetVersionMapping - for internal/external communcation/*{{{*/
+void pkgSystem::SetVersionMapping(map_id_t const in, map_id_t const out)
+{
+   if (in == out)
+      return;
+   d->idmap.emplace(in, out);
+}
+map_id_t pkgSystem::GetVersionMapping(map_id_t const in) const
+{
+   auto const o = d->idmap.find(in);
+   return (o == d->idmap.end()) ? in : o->second;
+}
+                                                                       /*}}}*/
 
 pkgSystem::~pkgSystem() {}
 
 pkgSystem::~pkgSystem() {}