}
else if (likely(value.size() == 32))
{
- if (likely(value.find_first_not_of("0123456789abcdefABCDEF") == string::npos))
- return MD5SumValue(value);
+ MD5SumValue sumvalue;
+ if (sumvalue.Set(value))
+ return sumvalue;
+
_error->Error("Malformed Description-md5 line; includes invalid character '%s'", value.c_str());
return MD5SumValue();
}
char *J = S;
for (; Start != End; ++Start)
{
- if (isspace(*Start) != 0)
+ if (isspace_ascii(*Start) != 0)
continue;
*J++ = tolower_ascii(*Start);
bool const &ParseRestrictionsList)
{
// Strip off leading space
- for (;Start != Stop && isspace(*Start) != 0; ++Start);
+ for (;Start != Stop && isspace_ascii(*Start) != 0; ++Start);
// Parse off the package name
const char *I = Start;
- for (;I != Stop && isspace(*I) == 0 && *I != '(' && *I != ')' &&
+ for (;I != Stop && isspace_ascii(*I) == 0 && *I != '(' && *I != ')' &&
*I != ',' && *I != '|' && *I != '[' && *I != ']' &&
*I != '<' && *I != '>'; ++I);
Package.assign(Start,I - Start);
// We don't want to confuse library users which can't handle MultiArch
- string const arch = _config->Find("APT::Architecture");
if (StripMultiArch == true) {
+ string const arch = _config->Find("APT::Architecture");
size_t const found = Package.rfind(':');
if (found != string::npos &&
(strcmp(Package.c_str() + found, ":any") == 0 ||
}
// Skip white space to the '('
- for (;I != Stop && isspace(*I) != 0 ; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0 ; I++);
// Parse a version
if (I != Stop && *I == '(')
{
// Skip the '('
- for (I++; I != Stop && isspace(*I) != 0 ; I++);
+ for (I++; I != Stop && isspace_ascii(*I) != 0 ; I++);
if (I + 3 >= Stop)
return 0;
I = ConvertRelation(I,Op);
// Skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
Start = I;
I = (const char*) memchr(I, ')', Stop - I);
if (I == NULL || Start == I)
// Skip trailing whitespace
const char *End = I;
- for (; End > Start && isspace(End[-1]); End--);
+ for (; End > Start && isspace_ascii(End[-1]); End--);
Ver.assign(Start,End-Start);
I++;
}
// Skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
- if (ParseArchFlags == true)
+ if (unlikely(ParseArchFlags == true))
{
+ string const arch = _config->Find("APT::Architecture");
APT::CacheFilter::PackageArchitectureMatchesSpecification matchesArch(arch, false);
// Parse an architecture
while (I != Stop)
{
// look for whitespace or ending ']'
- for (;End != Stop && !isspace(*End) && *End != ']'; ++End);
+ for (;End != Stop && !isspace_ascii(*End) && *End != ']'; ++End);
if (unlikely(End == Stop))
return 0;
}
I = End;
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
}
if (NegArch == true)
}
// Skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
}
- if (ParseRestrictionsList == true)
+ if (unlikely(ParseRestrictionsList == true))
{
// Parse a restrictions formula which is in disjunctive normal form:
// (foo AND bar) OR (blub AND bla)
for (;End != Stop && *End != '>'; ++End);
I = ++End;
// skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
} else {
bool applies2 = true;
// all the conditions inside a restriction list have to be
{
// look for whitespace or ending '>'
// End now points to the character after the current term
- for (;End != Stop && !isspace(*End) && *End != '>'; ++End);
+ for (;End != Stop && !isspace_ascii(*End) && *End != '>'; ++End);
if (unlikely(End == Stop))
return 0;
if (*End++ == '>') {
I = End;
// skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
break;
}
I = End;
// skip whitespace
- for (;I != Stop && isspace(*I) != 0; I++);
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
}
if (applies2) {
applies1 = true;
if (I == Stop || *I == ',' || *I == '|')
{
if (I != Stop)
- for (I++; I != Stop && isspace(*I) != 0; I++);
+ for (I++; I != Stop && isspace_ascii(*I) != 0; I++);
return I;
}