diff options
-rw-r--r-- | apt-pkg/acquire-item.h | 8 | ||||
-rw-r--r-- | apt-pkg/contrib/configuration.cc | 9 | ||||
-rw-r--r-- | apt-pkg/deb/deblistparser.cc | 32 | ||||
-rw-r--r-- | apt-pkg/deb/debmetaindex.cc | 2 | ||||
-rw-r--r-- | debian/changelog | 22 | ||||
-rw-r--r-- | ftparchive/cachedb.cc | 14 | ||||
-rw-r--r-- | methods/https.cc | 5 |
7 files changed, 69 insertions, 23 deletions
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 13be17a01..6c8341b62 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -697,6 +697,14 @@ class SubIndexTarget : public IndexTarget } }; /*}}}*/ +/** \brief Information about an subindex index file. */ /*{{{*/ +class OptionalSubIndexTarget : public OptionalIndexTarget +{ + virtual bool IsSubIndex() const { + return true; + } +}; + /*}}}*/ /** \brief An acquire item that downloads the detached signature {{{ * of a meta-index (Release) file, then queues up the release diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 0f7b37ee9..0949ec223 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -873,10 +873,10 @@ Configuration::MatchAgainstConfig::MatchAgainstConfig(char const * Config) { regfree(p); delete p; - clearPatterns(); - _error->Warning("Regex compilation error for '%s' in configuration option '%s'", - s->c_str(), Config); - return; + _error->Warning("Invalid regular expression '%s' in configuration " + "option '%s' will be ignored.", + s->c_str(), Config); + continue; } } if (strings.size() == 0) @@ -897,6 +897,7 @@ void Configuration::MatchAgainstConfig::clearPatterns() regfree(*p); delete *p; } + patterns.clear(); } /*}}}*/ // MatchAgainstConfig::Match - returns true if a pattern matches /*{{{*/ diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index a4a974897..6c8bc838b 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -818,16 +818,16 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI, ++lineEnd; // which datastorage need to be updated - map_ptrloc* writeTo = NULL; + enum { Suite, Component, Version, Origin, Codename, Label, None } writeTo = None; if (buffer[0] == ' ') ; - #define APT_PARSER_WRITETO(X, Y) else if (strncmp(Y, buffer, len) == 0) writeTo = &X; - APT_PARSER_WRITETO(FileI->Archive, "Suite") - APT_PARSER_WRITETO(FileI->Component, "Component") - APT_PARSER_WRITETO(FileI->Version, "Version") - APT_PARSER_WRITETO(FileI->Origin, "Origin") - APT_PARSER_WRITETO(FileI->Codename, "Codename") - APT_PARSER_WRITETO(FileI->Label, "Label") + #define APT_PARSER_WRITETO(X) else if (strncmp(#X, buffer, len) == 0) writeTo = X; + APT_PARSER_WRITETO(Suite) + APT_PARSER_WRITETO(Component) + APT_PARSER_WRITETO(Version) + APT_PARSER_WRITETO(Origin) + APT_PARSER_WRITETO(Codename) + APT_PARSER_WRITETO(Label) #undef APT_PARSER_WRITETO #define APT_PARSER_FLAGIT(X) else if (strncmp(#X, buffer, len) == 0) \ pkgTagSection::FindFlag(FileI->Flags, pkgCache::Flag:: X, dataStart, lineEnd); @@ -837,19 +837,19 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI, // load all data from the line and save it string data; - if (writeTo != NULL) + if (writeTo != None) data.append(dataStart, dataEnd); if (sizeof(buffer) - 1 == (dataEnd - buffer)) { while (fgets(buffer, sizeof(buffer), release) != NULL) { - if (writeTo != NULL) + if (writeTo != None) data.append(buffer); if (strlen(buffer) != sizeof(buffer) - 1) break; } } - if (writeTo != NULL) + if (writeTo != None) { // remove spaces and stuff from the end of the data line for (std::string::reverse_iterator s = data.rbegin(); @@ -859,7 +859,15 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI, break; *s = '\0'; } - *writeTo = WriteUniqString(data); + switch (writeTo) { + case Suite: FileI->Archive = WriteUniqString(data); break; + case Component: FileI->Component = WriteUniqString(data); break; + case Version: FileI->Version = WriteUniqString(data); break; + case Origin: FileI->Origin = WriteUniqString(data); break; + case Codename: FileI->Codename = WriteUniqString(data); break; + case Label: FileI->Label = WriteUniqString(data); break; + case None: break; + } } } fclose(release); diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 1d3754b00..f24e3afef 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -222,7 +222,7 @@ vector <struct IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const { } else { for (std::set<std::string>::const_iterator s = sections.begin(); s != sections.end(); ++s) { - IndexTarget * Target = new OptionalIndexTarget(); + IndexTarget * Target = new OptionalSubIndexTarget(); Target->ShortDesc = "TranslationIndex"; Target->MetaKey = TranslationIndexURISuffix("Index", *s); Target->URI = TranslationIndexURI("Index", *s); diff --git a/debian/changelog b/debian/changelog index 7e1ce4f4e..a06abbbc0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,25 @@ +apt (0.8.16~exp7) UNRELEASEDexperimental; urgency=low + + [ Michael Vogt ] + * apt-pkg/contrib/configuration.cc: + - fix double delete (LP: #848907) + - ignore only the invalid regexp instead of all options + * apt-pkg/acquire-item.h, apt-pkg/deb/debmetaindex.cc: + - fix fetching language information by adding OptionalSubIndexTarget + * methods/https.cc: + - cleanup broken downloads properly + + [ Colin Watson ] + * ftparchive/cachedb.cc: + - fix buffersize in bytes2hex + + [ David Kalnischkies ] + * apt-pkg/deb/deblistparser.cc: + - fix crash when the dynamic mmap needs to be grown in + LoadReleaseInfo (LP: #854090) + + -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 05 Oct 2011 18:14:11 +0200 + apt (0.8.16~exp6) experimental; urgency=low [ Christopher Baines ] diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index a1d70f912..6eccb8d4a 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -299,11 +299,15 @@ bool CacheDB::LoadContents(bool const &GenOnly) /*}}}*/ static string bytes2hex(uint8_t *bytes, size_t length) { - char space[65]; - if (length * 2 > sizeof(space) - 1) length = (sizeof(space) - 1) / 2; - for (size_t i = 0; i < length; i++) - snprintf(&space[i*2], 3, "%02x", bytes[i]); - return string(space); + char buf[3]; + string space; + + space.reserve(length*2 + 1); + for (size_t i = 0; i < length; i++) { + snprintf(buf, sizeof(buf), "%02x", bytes[i]); + space.append(buf); + } + return space; } static inline unsigned char xdig2num(char const &dig) { diff --git a/methods/https.cc b/methods/https.cc index 06a0e285a..709744ce3 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -271,14 +271,17 @@ bool HttpsMethod::Fetch(FetchItem *Itm) long curl_servdate; curl_easy_getinfo(curl, CURLINFO_FILETIME, &curl_servdate); + File->Close(); + // cleanup if(success != 0) { _error->Error("%s", curl_errorstr); + // unlink, no need keep 401/404 page content in partial/ + unlink(File->Name().c_str()); Fail(); return true; } - File->Close(); // Timestamp struct utimbuf UBuf; |