]> Dogcows Code - chaz/tar/commitdiff
Avoid undefined behavior
authorEric Blake <ebb9@byu.net>
Tue, 12 May 2009 09:12:15 +0000 (12:12 +0300)
committerSergey Poznyakoff <gray@gnu.org.ua>
Tue, 12 May 2009 09:12:15 +0000 (12:12 +0300)
* src/xheader.c (xheader_set_keyword_equal): Pass correct type to
ctype macros.
* src/transform.c (run_case_conv): Likewise.

src/transform.c
src/xheader.c

index 2e0de318618bf2236d0bc624c5d6be863079b5cc..03c06f6496e6715a7a176ae1af120433bf60fed1 100644 (file)
@@ -430,21 +430,21 @@ run_case_conv (enum case_ctl_type case_ctl, char *ptr, size_t size)
   switch (case_ctl)
     {
     case ctl_upcase_next:
-      case_ctl_buffer[0] = toupper (case_ctl_buffer[0]);
+      case_ctl_buffer[0] = toupper ((unsigned char) case_ctl_buffer[0]);
       break;
       
     case ctl_locase_next:
-      case_ctl_buffer[0] = tolower (case_ctl_buffer[0]);
+      case_ctl_buffer[0] = tolower ((unsigned char) case_ctl_buffer[0]);
       break;
       
     case ctl_upcase:
       for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++)
-       *p = toupper (*p);
+       *p = toupper ((unsigned char) *p);
       break;
       
     case ctl_locase:
       for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++)
-       *p = tolower (*p);
+       *p = tolower ((unsigned char) *p);
       break;
 
     case ctl_stop:
@@ -628,4 +628,3 @@ transform_name (char **pinput, int type)
 {
   return transform_name_fp (pinput, type, NULL, NULL);
 }
-
index 919ecd393b21a69f3572aee138ce3c95d0b3c06c..84ae08bbc6e23d66a91f1273744c9435e4c7f970 100644 (file)
@@ -1,6 +1,6 @@
 /* POSIX extended headers for tar.
 
-   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -168,12 +168,12 @@ xheader_set_keyword_equal (char *kw, char *eq)
       global = false;
     }
 
-  while (p > kw && isspace (*p))
+  while (p > kw && isspace ((unsigned char) *p))
     p--;
 
   *p = 0;
 
-  for (p = eq + 1; *p && isspace (*p); p++)
+  for (p = eq + 1; *p && isspace ((unsigned char) *p); p++)
     ;
 
   if (strcmp (kw, "delete") == 0)
This page took 0.032143 seconds and 4 git commands to generate.