From 654276143b4096f630cffb2010a08a60bd01c6b8 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Thu, 10 Jul 2003 12:26:42 +0000 Subject: [PATCH] * iobuf.c (check_special_filename): Replaced is isdigit by digitp to avoid passing negative values and potential locale problems. Problem noted by Christian Biere. * strgutil.c (strlwr,strcasecmp,strncasecmp): Make sure we don't pass a negative value. * miscutil.c (scan_isodatestr): Ditto. --- util/ChangeLog | 9 +++++++++ util/iobuf.c | 2 +- util/miscutil.c | 8 ++++---- util/strgutil.c | 11 +++++++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/util/ChangeLog b/util/ChangeLog index bd83acc10..a6c4e7bdb 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,12 @@ +2003-07-10 David Shaw (from Werner on stable branch) + + * iobuf.c (check_special_filename): Replaced is isdigit by digitp + to avoid passing negative values and potential locale problems. + Problem noted by Christian Biere. + * strgutil.c (strlwr,strcasecmp,strncasecmp): Make sure we don't + pass a negative value. + * miscutil.c (scan_isodatestr): Ditto. + 2003-05-30 David Shaw * srv.h, srv.c: Include windows.h with MINGW32. diff --git a/util/iobuf.c b/util/iobuf.c index 4d866c1e4..2b63d5c08 100644 --- a/util/iobuf.c +++ b/util/iobuf.c @@ -1032,7 +1032,7 @@ check_special_filename ( const char *fname ) int i; fname += 2; - for (i=0; isdigit (fname[i]); i++ ) + for (i=0; digitp (fname+i); i++ ) ; if ( !fname[i] ) return atoi (fname); diff --git a/util/miscutil.c b/util/miscutil.c index 42b2b3a88..b266d27d4 100644 --- a/util/miscutil.c +++ b/util/miscutil.c @@ -1,5 +1,5 @@ /* miscutil.c - miscellaneous utilities - * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -56,11 +56,11 @@ scan_isodatestr( const char *string ) if( strlen(string) != 10 || string[4] != '-' || string[7] != '-' ) return 0; for( i=0; i < 4; i++ ) - if( !isdigit(string[i]) ) + if( !digitp(string+i) ) return 0; - if( !isdigit(string[5]) || !isdigit(string[6]) ) + if( !digitp(string+5) || !digitp(string+6) ) return 0; - if( !isdigit(string[8]) || !isdigit(string[9]) ) + if( !digitp(string+8) || !digitp(string+9) ) return 0; year = atoi(string); month = atoi(string+5); diff --git a/util/strgutil.c b/util/strgutil.c index e793fc1ce..05524d84d 100644 --- a/util/strgutil.c +++ b/util/strgutil.c @@ -1,5 +1,6 @@ /* strgutil.c - string utilities - * Copyright (C) 1994, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * Copyright (C) 1994, 1998, 1999, 2000, 2001, + * 2003 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -825,7 +826,7 @@ strlwr(char *s) { char *p; for(p=s; *p; p++ ) - *p = tolower(*p); + *p = tolower(*(unsigned char *)p); return s; } #endif @@ -835,7 +836,8 @@ int strcasecmp( const char *a, const char *b ) { for( ; *a && *b; a++, b++ ) { - if( *a != *b && toupper(*a) != toupper(*b) ) + if( *a != *b + && toupper(*(const byte *)a) != toupper(*(const byte *)b) ) break; } return *(const byte*)a - *(const byte*)b; @@ -847,7 +849,8 @@ int strncasecmp( const char *a, const char *b, size_t n ) { for( ; n && *a && *b; a++, b++, n--) { - if( *a != *b && toupper(*a) != toupper(*b) ) + if( *a != *b + && toupper(*(const byte *)a) != toupper(*(const byte *)b) ) break; } if (!n)