summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Schroeder <mls@suse.de>2020-10-08 14:16:23 +0200
committerPanu Matilainen <pmatilai@redhat.com>2020-12-10 13:28:07 +0200
commitfa79a7bf0df3ba998c9b82d8144b27c270e9462c (patch)
tree0ce1be0ad4a9a1bda7f27f2f8dfae32535f52707
parentf18dd8029c56548b1839a97bbaff3da911e15c28 (diff)
downloadrpm-fa79a7bf0df3ba998c9b82d8144b27c270e9462c.tar.gz
Add error handling for versions in expressions
Versions are not supported in arithmetic operations. (cherry picked from commit 85765a79b7434f37486827c189d71cd9169db680)
-rw-r--r--rpmio/expression.c6
-rw-r--r--tests/rpmmacro.at6
2 files changed, 12 insertions, 0 deletions
diff --git a/rpmio/expression.c b/rpmio/expression.c
index f8210a456..ccd0e26f7 100644
--- a/rpmio/expression.c
+++ b/rpmio/expression.c
@@ -608,6 +608,9 @@ static Value doMultiplyDivide(ParseState state)
valueSetInteger(v1, i1 * i2);
else
valueSetInteger(v1, i1 / i2);
+ } else if (valueIsVersion(v1)) {
+ exprErr(state, _("* and / not supported for versions"), p);
+ goto err;
} else {
exprErr(state, _("* and / not supported for strings"), p);
goto err;
@@ -661,6 +664,9 @@ static Value doAddSubtract(ParseState state)
valueSetInteger(v1, i1 + i2);
else
valueSetInteger(v1, i1 - i2);
+ } else if (valueIsVersion(v1)) {
+ exprErr(state, _("+ and - not supported for versions"), p);
+ goto err;
} else {
char *copy;
diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at
index 7ceefb51d..80d7ee207 100644
--- a/tests/rpmmacro.at
+++ b/tests/rpmmacro.at
@@ -470,6 +470,8 @@ AT_CHECK([[
runroot rpm --define "aaa hello" --eval '%[%aaa]'
runroot rpm --eval '%[%{foo]'
runroot rpm --eval '%[v""]'
+runroot rpm --eval '%[v"1" + v"2"]'
+runroot rpm --eval '%[v"1" / v"2"]'
]],
[1],
[],
@@ -479,6 +481,10 @@ error: expanded string: hello
error: Unterminated {: {foo
error: invalid version: v""
error: ^
+error: + and - not supported for versions: v"1" + v"2"
+error: ^
+error: * and / not supported for versions: v"1" / v"2"
+error: ^
])
AT_CLEANUP