diff options
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index a472babeb..d8f161e6d 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -177,6 +177,14 @@ void pkgCacheGenerator::ReMap(void const * const oldMap, void const * const newM for (std::vector<pkgCache::RlsFileIterator*>::const_iterator i = Dynamic<pkgCache::RlsFileIterator>::toReMap.begin(); i != Dynamic<pkgCache::RlsFileIterator>::toReMap.end(); ++i) (*i)->ReMap(oldMap, newMap); + for (APT::StringView* ViewP : Dynamic<APT::StringView>::toReMap) { + // Ignore views outside of the cache. + if (ViewP->data() < static_cast<const char*>(oldMap) + || ViewP->data() > static_cast<const char*>(oldMap) + oldSize) + continue; + const char *data = ViewP->data() + (static_cast<const char*>(newMap) - static_cast<const char*>(oldMap)); + *ViewP = StringView(data , ViewP->size()); + } } /*}}}*/ // CacheGenerator::WriteStringInMap /*{{{*/ map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String, @@ -503,6 +511,7 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato /* This creates a new group structure and adds it to the hash table */ bool pkgCacheGenerator::NewGroup(pkgCache::GrpIterator &Grp, StringView Name) { + Dynamic<StringView> DName(Name); Grp = Cache.FindGrp(Name); if (Grp.end() == false) return true; @@ -537,6 +546,8 @@ bool pkgCacheGenerator::NewGroup(pkgCache::GrpIterator &Grp, StringView Name) bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg, StringView Name, StringView Arch) { pkgCache::GrpIterator Grp; + Dynamic<StringView> DName(Name); + Dynamic<StringView> DArch(Arch); Dynamic<pkgCache::GrpIterator> DynGrp(Grp); if (unlikely(NewGroup(Grp, Name) == false)) return false; @@ -1014,6 +1025,9 @@ bool pkgCacheListParser::NewDepends(pkgCache::VerIterator &Ver, { pkgCache::GrpIterator Grp; Dynamic<pkgCache::GrpIterator> DynGrp(Grp); + Dynamic<StringView> DynPackageName(PackageName); + Dynamic<StringView> DynArch(Arch); + Dynamic<StringView> DynVersion(Version); if (unlikely(Owner->NewGroup(Grp, PackageName) == false)) return false; @@ -1081,6 +1095,9 @@ bool pkgCacheListParser::NewProvides(pkgCache::VerIterator &Ver, uint8_t const Flags) { pkgCache const &Cache = Owner->Cache; + Dynamic<StringView> DynPkgName(PkgName); + Dynamic<StringView> DynArch(PkgArch); + Dynamic<StringView> DynVersion(Version); // We do not add self referencing provides if (Ver.ParentPkg().Name() == PkgName && (PkgArch == Ver.ParentPkg().Arch() || @@ -1134,6 +1151,8 @@ bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, StringVi pkgCache &Cache = Owner->Cache; pkgCache::GrpIterator Grp = Cache.FindGrp(Package); Dynamic<pkgCache::GrpIterator> DynGrp(Grp); + Dynamic<StringView> DynPackage(Package); + Dynamic<StringView> DynVersion(Version); if (Grp.end() == true) return NewProvides(Ver, Package, Cache.NativeArch(), Version, Flags); |