bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-tar] [PATCH] Allow escaped delimiter in transform replace expr.


From: Charles McGarvey
Subject: [Bug-tar] [PATCH] Allow escaped delimiter in transform replace expr.
Date: Tue, 11 Aug 2015 17:14:31 -0600

I was surprised today to discover that you cannot escape a delimiter in the
replace expression of a --transform option. GNU tar treats the delimiter like
any other non-special character, causing a literal backslash to also be
inserted in the replacement before the delimiter. Is this a bug? If so, here
is a patch with a possible fix (though I'd need some help to write a test).

Example:
tar -x --transform='s/foo/bar\/baz/'
# expecting "foo" to be replaced with "bar/baz", but get "bar\/baz" instead

---
 src/transform.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/transform.c b/src/transform.c
index cd9e27c..2fbcc64 100644
--- a/src/transform.c
+++ b/src/transform.c
@@ -378,13 +378,19 @@ parse_transform_expr (const char *expr)
              break;
 
            default:
-             /* Try to be nice */
-             {
-               char buf[2];
-               buf[0] = '\\';
-               buf[1] = *cur;
-               add_literal_segment (tf, buf, buf + 2);
-             }
+              if (*cur == delim)
+                {
+                  add_char_segment (tf, delim);
+                  cur++;
+                }
+              else
+                {
+                  /* Try to be nice */
+                  char buf[2];
+                  buf[0] = '\\';
+                  buf[1] = *cur;
+                  add_literal_segment (tf, buf, buf + 2);
+                }
              cur++;
              break;
            }
-- 
2.5.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]