]> git.ipfire.org Git - thirdparty/tar.git/commitdiff
Make stripped_prefix_len signed
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 2 Aug 2024 16:07:06 +0000 (09:07 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 4 Aug 2024 08:41:43 +0000 (01:41 -0700)
This is part of the general guideline that signed integer types
are safer.
* src/names.c (stripped_prefix_len): Return ptrdiff_t,
not size_t.  All callers changed.

src/common.h
src/list.c
src/names.c

index c2c22fc3a0d7347e557236e10f3b36ac5631a170..085e7d9618acb884929d7d079a62495fa4cf907a 100644 (file)
@@ -810,7 +810,7 @@ struct name *name_scan (const char *name, bool exact);
 struct name const *name_from_list (void);
 void blank_name_list (void);
 char *make_file_name (const char *dir_name, const char *name);
-size_t stripped_prefix_len (char const *file_name, size_t num);
+ptrdiff_t stripped_prefix_len (char const *file_name, size_t num);
 bool all_names_found (struct tar_stat_info *st);
 
 void add_avoided_name (char const *name);
index c9717eb45c894846cc77f1d81d17dd72a4bdf420..339a650b3a9f2f1b8f8422a0e9ca6cdf698e0b31 100644 (file)
@@ -100,9 +100,9 @@ decode_xform (char *file_name, void *data)
 
   if (strip_name_components)
     {
-      size_t prefix_len = stripped_prefix_len (file_name,
-                                              strip_name_components);
-      if (prefix_len == (size_t) -1)
+      ptrdiff_t prefix_len = stripped_prefix_len (file_name,
+                                                 strip_name_components);
+      if (prefix_len < 0)
        prefix_len = strlen (file_name);
       file_name += prefix_len;
     }
index 03d1a12e6c7e838faa4dd3292a8264ed0d5a04b1..792b9d381ba9ae76cfe4d99bab99743e114e2530 100644 (file)
@@ -1964,9 +1964,10 @@ make_file_name (const char *directory_name, const char *name)
 
 /* Return the size of the prefix of FILE_NAME that is removed after
    stripping NUM leading file name components.  NUM must be
-   positive.  */
+   positive.  Return a negative number if FILE_NAME does not have
+   enough components.  */
 
-size_t
+ptrdiff_t
 stripped_prefix_len (char const *file_name, size_t num)
 {
   char const *p = file_name + FILE_SYSTEM_PREFIX_LEN (file_name);