rpm/rpm-4.13.90-macro-noquote.patch
Panu Matilainen 351ab49315 Disable macro argument quoting as a band-aid to #1481025
Too many existing macros heavily rely on quotes passing untouched,
needs a different approach upstream.
2017-08-14 11:51:21 +03:00

148 lines
4.1 KiB
Diff

diff -up rpm-4.13.90-git14002/rpmio/macro.c.noquote rpm-4.13.90-git14002/rpmio/macro.c
--- rpm-4.13.90-git14002/rpmio/macro.c.noquote 2017-08-14 11:43:41.160400779 +0300
+++ rpm-4.13.90-git14002/rpmio/macro.c 2017-08-14 11:43:58.924398809 +0300
@@ -649,61 +649,6 @@ freeArgs(MacroBuf mb, int delete)
mb->level--;
}
-/* XXX: belongs to argv.c but figure a sensible API before making public */
-static ARGV_t argvSplitShell(const char * str, const char * seps)
-{
- char *dest = NULL;
- ARGV_t argv;
- int argc = 1;
- const char * s;
- char * t;
- int c;
- int quote;
-
- if (str == NULL || seps == NULL)
- return NULL;
-
- dest = xmalloc(strlen(str) + 1);
- t = dest;
- s = str;
- argc = 1;
-
- while ((c = *s)) {
- if (strchr(seps, c)) {
- s++;
- } else {
- if (!strchr("\"\'",c)) {
- /* read argument not in "" or ''*/
- for (; (c = *s); s++, t++) {
- if (strchr(seps, c) || strchr("\"\'",c))
- break;
- *t = c;
- }
- } else {
- /* read argument in "" or '' */
- quote = *s;
- s++;
- for (; (c = *s) && (c != quote); t++,s++)
- *t = c;
- s++;
- }
- *t = '\0';
- t++;
- argc++;
- }
- }
- *t = '\0';
-
- argv = xmalloc((argc + 1) * sizeof(*argv));
- for (c = 0, s = dest; s < t; s+= strlen(s) + 1) {
- argv[c] = xstrdup(s);
- c++;
- }
- argv[c] = NULL;
- free(dest);
- return argv;
-}
-
/**
* Parse arguments (to next new line) for parameterized macro.
* @todo Use popt rather than getopt to parse args.
@@ -740,7 +685,7 @@ grabArgs(MacroBuf mb, const rpmMacroEntr
expandThis(mb, se, lastc-se, &s);
mb->escape = oescape;
- av = argvSplitShell(s, " \t");
+ av = argvSplitString(s, " \t", ARGV_SKIPEMPTY);
argvAppend(&argv, av);
argvFree(av);
free(s);
diff -up rpm-4.13.90-git14002/tests/rpmmacro.at.noquote rpm-4.13.90-git14002/tests/rpmmacro.at
--- rpm-4.13.90-git14002/tests/rpmmacro.at.noquote 2017-08-14 11:39:38.512426695 +0300
+++ rpm-4.13.90-git14002/tests/rpmmacro.at 2017-08-14 11:40:18.807422527 +0300
@@ -268,69 +268,6 @@ runroot rpm \
)
AT_CLEANUP
-AT_SETUP([macro arguments in double quotes])
-AT_KEYWORDS([macros arguments])
-AT_CHECK([
-runroot rpm --define "%foo() 1:%1 2:%2" --eval '%foo "argument 1" argument_2'
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval '%foo "argument 1" argument_2 """"""'
-
-runroot rpm \
- --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval '%foo "arg. number 1""arg. number 2" "arg number 3" "" normal'
-
-runroot rpm \
- --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval '%foo "arg. number 1"normal"arg. number 2" '
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval '%foo """jjj"""aa"" '
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" --eval '%foo xx"yy""zz""""bb" '
-],
-[0],
-[1:argument 1 2:argument_2
-1:argument 1 2:argument_2 3: 4: 5:
-1:arg. number 1 2:arg. number 2 3:arg number 3 4: 5:normal
-1:arg. number 1 2:normal 3:arg. number 2 4:%4 5:%5
-1: 2:jjj 3: 4:aa 5:
-1:xx 2:yy 3:zz 4: 5:bb
-])
-AT_CLEANUP
-
-AT_SETUP([macro arguments in single + double quotes])
-AT_KEYWORDS([macros arguments])
-AT_CHECK([
-
-runroot rpm \
- --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval "%foo 'arg. number 1''arg. number 2' 'arg number 3' '' normal"
-
-runroot rpm \
- --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval "%foo 'arg. number 1'normal'arg. number 2'''normal "
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval "%foo '''jjj'''aa'' "
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" \
- --eval "%foo ''\"jjj\"''aa\"\" "
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" --eval "%foo xx'yy''zz''''bb' "
-
-runroot rpm --define "%foo() 1:%1 2:%2 3:%3 4:%4 5:%5" --eval "%foo xx'yy'\"zz\"\"\"'bb' "
-],
-[0],
-[1:arg. number 1 2:arg. number 2 3:arg number 3 4: 5:normal
-1:arg. number 1 2:normal 3:arg. number 2 4: 5:normal
-1: 2:jjj 3: 4:aa 5:
-1: 2:jjj 3: 4:aa 5:
-1:xx 2:yy 3:zz 4: 5:bb
-1:xx 2:yy 3:zz 4: 5:bb
-])
-AT_CLEANUP
-
AT_SETUP([%undefine from different scopes])
AT_KEYWORDS([macros %undefine])
AT_CHECK([