]> Dogcows Code - chaz/tar/commitdiff
(decode_options): Don't pass names longer than UNAME_FIELD_SIZE to
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 31 Jan 1999 02:52:16 +0000 (02:52 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 31 Jan 1999 02:52:16 +0000 (02:52 +0000)
uname_to_uid, as it messes up the cache.  Similarly for gname_to_uid.

src/tar.c

index 10224a9d4bdf21e6f62b9d1b3fcbef8d7e24c315..10ac93c699a894620baf8c372d88724f1eb8a900 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -1,5 +1,5 @@
 /* A tar (tape archiver) program.
-   Copyright (C) 1988, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
+   Copyright (C) 1988, 92,93,94,95,96,97, 1999 Free Software Foundation, Inc.
    Written by John Gilmore, starting 1985-08-25.
 
    This program is free software; you can redistribute it and/or modify it
@@ -537,11 +537,13 @@ decode_options (int argc, char *const *argv)
          *out++ = xstrdup (buffer);
          cursor = strchr (OPTION_STRING, *letter);
          if (cursor && cursor[1] == ':')
-           if (in < argv + argc)
-             *out++ = *in++;
-           else
-             USAGE_ERROR ((0, 0, _("Old option `%c' requires an argument."),
-                           *letter));
+           {
+             if (in < argv + argc)
+               *out++ = *in++;
+             else
+               USAGE_ERROR ((0, 0, _("Old option `%c' requires an argument."),
+                             *letter));
+           }
        }
 
       /* Copy all remaining options.  */
@@ -850,7 +852,8 @@ decode_options (int argc, char *const *argv)
        break;
 
       case GROUP_OPTION:
-       if (!gname_to_gid (optarg, &group_option))
+       if (! (strlen (optarg) < GNAME_FIELD_SIZE
+              && gname_to_gid (optarg, &group_option)))
          {
            uintmax_t g;
            if (!check_decimal (optarg, &g) || g != (gid_t) g)
@@ -879,7 +882,8 @@ decode_options (int argc, char *const *argv)
        break;
 
       case OWNER_OPTION:
-       if (!uname_to_uid (optarg, &owner_option))
+       if (! (strlen (optarg) < UNAME_FIELD_SIZE
+              && uname_to_uid (optarg, &owner_option)))
          {
            uintmax_t u;
            if (!check_decimal (optarg, &u) || u != (uid_t) u)
This page took 0.030053 seconds and 4 git commands to generate.