]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/strutl.cc
StringToBool: only act if the entire string is consumed by strtol()
[apt.git] / apt-pkg / contrib / strutl.cc
index ce69c7a027ea6306c5a1d421e8c756fcd9885a4a..922229e902f02a0e9eb3bfc71802c060dc9ac349 100644 (file)
@@ -704,9 +704,12 @@ string LookupTag(const string &Message,const char *Tag,const char *Default)
    then returns the result. Several varients on true/false are checked. */
 int StringToBool(const string &Text,int Default)
 {
-   char *End;
-   int Res = strtol(Text.c_str(),&End,0);   
-   if (End != Text.c_str() && Res >= 0 && Res <= 1)
+   char *ParseEnd;
+   int Res = strtol(Text.c_str(),&ParseEnd,0);
+   // ensure that the entire string was converted by strtol to avoid
+   // failures on "apt-cache show -a 0ad" where the "0" is converted
+   const char *TextEnd = Text.c_str()+Text.size();
+   if (ParseEnd == TextEnd && Res >= 0 && Res <= 1)
       return Res;
    
    // Check for positives