Browse Source

fix problematic use of tolower() when calculating the version

hash by using locale independant tolower_ascii() function. 
Thanks to M. Vefa Bicakci (LP: #80248)
debian/1.8.y
Michael Vogt 13 years ago
parent
commit
4e86942abf
  1. 11
      apt-pkg/contrib/strutl.cc
  2. 1
      apt-pkg/contrib/strutl.h
  3. 2
      apt-pkg/deb/deblistparser.cc
  4. 4
      apt-pkg/pkgcache.cc
  5. 4
      debian/changelog

11
apt-pkg/contrib/strutl.cc

@ -1074,6 +1074,17 @@ char *safe_snprintf(char *Buffer,char *End,const char *Format,...)
}
/*}}}*/
// tolower_ascii - tolower() function that ignores the locale /*{{{*/
// ---------------------------------------------------------------------
/* */
int tolower_ascii(int c)
{
if (c >= 'A' and c <= 'Z')
return c + 32;
return c;
}
/*}}}*/
// CheckDomainList - See if Host is in a , seperate list /*{{{*/
// ---------------------------------------------------------------------
/* The domain list is a comma seperate list of domains that are suffix

1
apt-pkg/contrib/strutl.h

@ -62,6 +62,7 @@ void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
void strprintf(string &out,const char *format,...) APT_FORMAT2;
char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_FORMAT3;
bool CheckDomainList(const string &Host, const string &List);
int tolower_ascii(int c);
#define APT_MKSTRCMP(name,func) \
inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \

2
apt-pkg/deb/deblistparser.cc

@ -213,7 +213,7 @@ unsigned short debListParser::VersionHash()
for (; Start != End; Start++)
{
if (isspace(*Start) == 0)
*I++ = tolower(*Start);
*I++ = tolower_ascii(*Start);
if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
*I++ = '=';
if (*Start == '>' && Start[1] != '>' && Start[1] != '=')

4
apt-pkg/pkgcache.cc

@ -163,7 +163,7 @@ unsigned long pkgCache::sHash(const string &Str) const
{
unsigned long Hash = 0;
for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
Hash = 5*Hash + tolower(*I);
Hash = 5*Hash + tolower_ascii(*I);
return Hash % _count(HeaderP->HashTable);
}
@ -171,7 +171,7 @@ unsigned long pkgCache::sHash(const char *Str) const
{
unsigned long Hash = 0;
for (const char *I = Str; *I != 0; I++)
Hash = 5*Hash + tolower(*I);
Hash = 5*Hash + tolower_ascii(*I);
return Hash % _count(HeaderP->HashTable);
}

4
debian/changelog

@ -48,6 +48,10 @@ apt (0.7.21) UNRELEASED; urgency=low
- add Acquire::https::AllowRedirect support
* methods/gpgv.cc:
- properly check for expired and revoked keys (closes: #433091)
* fix problematic use of tolower() when calculating the version
hash by using locale independant tolower_ascii() function.
Thanks to M. Vefa Bicakci (LP: #80248)
[ Dereck Wonnacott ]
* apt-ftparchive might write corrupt Release files (LP: #46439)

Loading…
Cancel
Save