From 48d83be3366363deb69acf6a2e214f22a592ac01 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 13 Nov 2007 07:01:26 +0000 Subject: [PATCH] Don't read from name[-1]. * src/incremen.c (make_directory): Handle namelen == 0, since find_directory_meta calls make_directory (""). --- ChangeLog | 12 +++++++++--- src/incremen.c | 18 +++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0a84324..5e05133 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-12 Jim Meyering + + Don't read from name[-1]. + * src/incremen.c (make_directory): Handle namelen == 0, since + find_directory_meta calls make_directory (""). + 2007-11-07 Sergey Poznyakoff * bootstrap (checkout): Use URL of the gnulib CVS mirror. @@ -11,7 +17,7 @@ TAR_BLOCKING_FACTOR environment variable. * doc/tar.texi: Update * NEWS: Update - + 2007-10-30 Sergey Poznyakoff * doc/Makefile.am: Use texi2html and the CVS version of gendocs.sh @@ -41,9 +47,9 @@ * src/system.c (sys_exec_checkpoint_script): New function. (sys_exec_info_script): Restore SIGPIPE handler. * src/tar.c: (parse_opt): New options --hard-dereference, - --checkpoint-action. + --checkpoint-action. (decode_options): Call checkpoint_finish_compile. - + * src/system.c (sys_exec_info_script): Initialize buf. Problem reported by Bengt-Arne Fjellner. diff --git a/src/incremen.c b/src/incremen.c index d570082..1c9113c 100644 --- a/src/incremen.c +++ b/src/incremen.c @@ -124,8 +124,8 @@ make_directory (const char *name) directory->orig = NULL; directory->flags = false; strcpy (directory->name, name); - if (ISSLASH (directory->name[namelen-1])) - directory->name[namelen-1] = 0; + if (namelen && ISSLASH (directory->name[namelen - 1])) + directory->name[namelen - 1] = 0; directory->tagfile = NULL; return directory; } @@ -336,7 +336,7 @@ procdir (char *name_buffer, struct stat *stat_data, { const char *tag_file_name; - + switch (check_exclusion_tags (name_buffer, &tag_file_name)) { case exclusion_tag_all: @@ -355,13 +355,13 @@ procdir (char *name_buffer, struct stat *stat_data, _("contents not dumped")); directory->children = NO_CHILDREN; break; - + case exclusion_tag_under: exclusion_tag_warning (name_buffer, tag_file_name, _("contents not dumped")); directory->tagfile = tag_file_name; break; - + case exclusion_tag_none: break; } @@ -507,7 +507,7 @@ scan_directory (char *dir, dev_t device) size_t name_length; /* used length in name_buffer */ struct stat stat_data; struct directory *directory; - + if (! dirp) savedir_error (dir); @@ -531,7 +531,7 @@ scan_directory (char *dir, dev_t device) directory = procdir (name_buffer, &stat_data, device, NO_CHILDREN, false, NULL); - + if (dirp && directory->children != NO_CHILDREN) { char *entry; /* directory entry being scanned */ @@ -1416,12 +1416,12 @@ try_purge_directory (char const *directory_name) This is an extra safety precaution. Besides, it might be necessary to extract from archives created with tar versions prior to 1.19. */ - + if (*src) src = safer_name_suffix (src, false, absolute_names_option); if (*dst) dst = safer_name_suffix (dst, false, absolute_names_option); - + if (*src == 0) src = temp_stub; else if (*dst == 0) -- 2.45.2