summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/deb/deblistparser.cc15
1 files changed, 7 insertions, 8 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 15251bce4..ea4d8e063 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -254,18 +254,17 @@ std::vector<std::string> debListParser::AvailableDescriptionLanguages()
std::vector<std::string> const understood = APT::Configuration::getLanguages();
std::vector<std::string> avail;
static constexpr int prefixLen = 12;
- static constexpr int avgLanguageLen = 5;
- std::string tagname;
-
- tagname.reserve(prefixLen + avgLanguageLen);
- tagname.assign("Description-");
+ char buf[32] = "Description-";
if (Section.Exists("Description") == true)
avail.push_back("");
for (std::vector<std::string>::const_iterator lang = understood.begin(); lang != understood.end(); ++lang)
{
- tagname.resize(prefixLen);
- tagname.append(*lang);
- if (Section.Exists(tagname) == true)
+ if (unlikely(lang->size() > sizeof(buf) - prefixLen)) {
+ _error->Warning("Ignoring translated description %s", lang->c_str());
+ continue;
+ }
+ memcpy(buf + prefixLen, lang->c_str(), lang->size());
+ if (Section.Exists(StringView(buf, prefixLen + lang->size())) == true)
avail.push_back(*lang);
}
return avail;