From c391c5cbf4631ed63a90962272333fb504ef4e50 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Mon, 17 Dec 2007 17:50:55 -0500 Subject: [PATCH] BUG: fix for bug 5837, libtar and long path names --- Utilities/cmtar/encode.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Utilities/cmtar/encode.c b/Utilities/cmtar/encode.c index 1c7595442..40b57074f 100644 --- a/Utilities/cmtar/encode.c +++ b/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);