diff options
author | Julian Andres Klode <jak@debian.org> | 2015-08-12 20:44:40 +0200 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2015-08-12 20:51:08 +0200 |
commit | 809aa216c630f1cc61b0c3b9d992d4a3be14be3c (patch) | |
tree | 8e742b619907e2400897e3667fb7b1ae45af6b57 /apt-pkg/policy.cc | |
parent | f3f06cae53d8ed5742f47de46d9f9808cfc5ec29 (diff) |
policy: Be more strict about parsing pin files, and document prio 0
Treat invalid pin priorities and overflows as an error.
Closes: #429912
Diffstat (limited to 'apt-pkg/policy.cc')
-rw-r--r-- | apt-pkg/policy.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index bf6ec0ff7..76c36b71b 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -478,11 +478,18 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) } for (; Word != End && isspace(*Word) != 0; Word++); - short int priority = Tags.FindI("Pin-Priority", 0); + int priority = Tags.FindI("Pin-Priority", 0); + if (priority < std::numeric_limits<short>::min() || + priority > std::numeric_limits<short>::max() || + _error->PendingError()) { + return _error->Error(_("%s: Value %s is outside the range of valid pin priorities (%d to %d)"), + File.c_str(), Tags.FindS("Pin-Priority").c_str(), + std::numeric_limits<short>::min(), + std::numeric_limits<short>::max()); + } if (priority == 0) { - _error->Warning(_("No priority (or zero) specified for pin")); - continue; + return _error->Error(_("No priority (or zero) specified for pin")); } istringstream s(Name); |