teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone

Blame 0039-debugedit-skip_dir_prefix-should-check-for-dir-separ.patch

Igor Gnatenko 082d5d
From faaf3bbfc261f49eda996801b50996fb1066092f Mon Sep 17 00:00:00 2001
Igor Gnatenko 082d5d
From: Mark Wielaard <mark@klomp.org>
Igor Gnatenko 082d5d
Date: Wed, 28 Jun 2017 20:25:39 +0200
Mark Wielaard 284dc3
Subject: [PATCH] debugedit: skip_dir_prefix should check for dir separator.
Igor Gnatenko 082d5d
Igor Gnatenko 082d5d
To count as a real directory prefix the string matched should either
Igor Gnatenko 082d5d
be equal to the given prefix or start with the prefix plus '/'.
Igor Gnatenko 082d5d
Igor Gnatenko 082d5d
skip_dir_prefix is always used with base_dir or dest_dir which don't
Igor Gnatenko 082d5d
end with a slash themselves.
Igor Gnatenko 082d5d
Igor Gnatenko 082d5d
This really only is an issue if a package would put a directory named
Igor Gnatenko 082d5d
similar to the package source dir (which cargo on fedora does, by adding
Igor Gnatenko 082d5d
a directory named cargo-vendor in the builddir itself).
Igor Gnatenko 082d5d
Igor Gnatenko 082d5d
Signed-off-by: Mark Wielaard <mark@klomp.org>
Igor Gnatenko 082d5d
(cherry picked from commit 2ea5619e375f0717b755c8aa4a38254ea622b833)
Igor Gnatenko 082d5d
---
Igor Gnatenko 082d5d
 tools/debugedit.c | 10 ++++++++--
Igor Gnatenko 082d5d
 1 file changed, 8 insertions(+), 2 deletions(-)
Igor Gnatenko 082d5d
Mark Wielaard 6e205b
diff --git a/tools/debugedit.c b/tools/debugedit.c
Igor Gnatenko 082d5d
index bf115136c..682189929 100644
Mark Wielaard 6e205b
--- a/tools/debugedit.c
Mark Wielaard 6e205b
+++ b/tools/debugedit.c
Mark Wielaard 6e205b
@@ -662,7 +662,8 @@ canonicalize_path (const char *s, char *d)
Mark Wielaard 6e205b
 /* Returns the rest of PATH if it starts with DIR_PREFIX, skipping any
Mark Wielaard 6e205b
    / path separators, or NULL if PATH doesn't start with
Mark Wielaard 6e205b
    DIR_PREFIX. Might return the empty string if PATH equals DIR_PREFIX
Mark Wielaard 6e205b
-   (modulo trailing slashes). Never returns path starting with '/'. */
Mark Wielaard 6e205b
+   (modulo trailing slashes). Never returns path starting with '/'.
Mark Wielaard 6e205b
+   Note that DIR_PREFIX itself should NOT end with a '/'.  */
Mark Wielaard 6e205b
 static const char *
Mark Wielaard 6e205b
 skip_dir_prefix (const char *path, const char *dir_prefix)
Mark Wielaard 6e205b
 {
Mark Wielaard 6e205b
@@ -670,12 +671,17 @@ skip_dir_prefix (const char *path, const char *dir_prefix)
Mark Wielaard 6e205b
   if (strncmp (path, dir_prefix, prefix_len) == 0)
Mark Wielaard 6e205b
     {
Mark Wielaard 6e205b
       path += prefix_len;
Mark Wielaard 6e205b
+      /* Unless path == dir_prefix there should be at least one '/'
Mark Wielaard 6e205b
+	 in the path (which we will skip).  Otherwise the path has
Mark Wielaard 6e205b
+	 a different (longer) directory prefix.  */
Mark Wielaard 6e205b
+      if (*path != '\0' && !IS_DIR_SEPARATOR (*path))
Mark Wielaard 6e205b
+	return NULL;
Mark Wielaard 6e205b
       while (IS_DIR_SEPARATOR (path[0]))
Mark Wielaard 6e205b
 	path++;
Mark Wielaard 6e205b
       return path;
Mark Wielaard 6e205b
     }
Mark Wielaard 6e205b
 
Mark Wielaard 6e205b
-  return 0;
Mark Wielaard 6e205b
+  return NULL;
Mark Wielaard 6e205b
 }
Mark Wielaard 6e205b
 
Mark Wielaard 6e205b
 /* Most strings will be in the existing debug string table. But to