From 847c6f062c267c4be643be9c202141bd330a7891 Mon Sep 17 00:00:00 2001 Message-Id: <847c6f062c267c4be643be9c202141bd330a7891.1619695949.git.pmatilai@redhat.com> From: Panu Matilainen Date: Wed, 28 Apr 2021 10:20:55 +0300 Subject: [PATCH] Ignore comment line contents in macro files (#1659) Previously %{ and similar in macro file comment line would cause the line continuation logic to trigger and silently eat macro definitions up to the next empty line. Since 75275a87cff04da65d3557f2c40ea2b526528c4c we permit empty lines inside macro definitions, which would cause the whole remaining file to be silently skipped (RhBug:1953910) Only ever parse macro file lines starting with %, and add a test for the case. Actual patch by Michael Schroeder, testcase by undersigned. Fixes: #1659 --- rpmio/macro.c | 8 ++++++++ tests/data/macros.testfile | 7 +++++++ tests/rpmmacro.at | 17 +++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/rpmio/macro.c b/rpmio/macro.c index 6dfc73336..94ff5187d 100644 --- a/rpmio/macro.c +++ b/rpmio/macro.c @@ -226,6 +226,14 @@ rdcl(char * buf, size_t size, FILE *f) nb--; if (*q == 0) break; /* no newline found, EOF */ + if (p == buf) { + while (*p && isblank(*p)) + p++; + if (*p != '%') { /* only parse actual macro */ + *q = '\0'; /* trim trailing \r, \n */ + break; + } + } for (; p < q; p++) { switch (*p) { case '\\': diff --git a/tests/data/macros.testfile b/tests/data/macros.testfile index 86fd883fc..f56c80578 100644 --- a/tests/data/macros.testfile +++ b/tests/data/macros.testfile @@ -5,6 +5,13 @@ } %second %{?def:macro_2} +# empty lines inside a %{ block +%empty0 %{expand: +some + +thing +} + %comment1 %{expand: read %dnl comment diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at index 072b986be..c0f114087 100644 --- a/tests/rpmmacro.at +++ b/tests/rpmmacro.at @@ -945,6 +945,23 @@ read []) AT_CLEANUP +AT_SETUP([macro file empty lines]) +AT_KEYWORDS([macros]) +AT_CHECK([ +runroot rpm \ + --macros /data/macros.testfile \ + --eval "%{empty0}" +], +[0], +[ +some + +thing + +], +[]) +AT_CLEANUP + AT_SETUP([macro traceback]) AT_KEYWORDS([macros]) AT_CHECK([ -- 2.30.2