Browse Source

BUG: fix for bug 5837, libtar and long path names

Bill Hoffman 18 years ago
parent
commit
c391c5cbf4
1 changed files with 3 additions and 3 deletions
  1. 3 3
      Utilities/cmtar/encode.c

+ 3 - 3
Utilities/cmtar/encode.c

@@ -93,16 +93,16 @@ th_set_path(TAR *t, char *pathname)
   if (pathname[strlen(pathname) - 1] != '/' && TH_ISDIR(t))
     strcpy(suffix, "/");
 
-  if (strlen(pathname) > T_NAMELEN && (t->options & TAR_GNU))
+  if (strlen(pathname)+strlen(suffix) >= T_NAMELEN && (t->options & TAR_GNU))
   {
     /* GNU-style long name */
     t->th_buf.gnu_longname = strdup(pathname);
     strncpy(t->th_buf.name, t->th_buf.gnu_longname, T_NAMELEN);
   }
-  else if (strlen(pathname) > T_NAMELEN)
+  else if (strlen(pathname)+ strlen(suffix) >= T_NAMELEN)
   {
     /* POSIX-style prefix field */
-    tmp = strchr(&(pathname[strlen(pathname) - T_NAMELEN - 1]), '/');
+    tmp = strrchr(pathname, '/');
     if (tmp == NULL)
     {
       printf("!!! '/' not found in \"%s\"\n", pathname);