[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
- [Bug-tar] [PATCH] Allow escaped delimiter in transform replace expr.,
Charles McGarvey <=