Florian Festi 443474
From 321933f060896f721e361a1c8a8d3731bdcee827 Mon Sep 17 00:00:00 2001
Florian Festi 443474
From: Michael Schroeder <mls@suse.de>
Florian Festi 443474
Date: Wed, 22 Jun 2022 14:07:01 +0200
Florian Festi 443474
Subject: [PATCH] Fix short circuiting of version strings in expressions
Florian Festi 443474
Florian Festi 443474
We use an empty string when discarding a value due to short circuiting, but
Florian Festi 443474
an empty string is not allowed for versions. So use "0" in that case.
Florian Festi 443474
Florian Festi 443474
Fixes: #1883
Florian Festi 443474
---
Florian Festi 443474
 rpmio/expression.c | 2 +-
Florian Festi 443474
 tests/rpmmacro.at  | 2 ++
Florian Festi 443474
 2 files changed, 3 insertions(+), 1 deletion(-)
Florian Festi 443474
Florian Festi 443474
diff --git a/rpmio/expression.c b/rpmio/expression.c
Florian Festi 443474
index a389a04d5..98a44bbdb 100644
Florian Festi 443474
--- a/rpmio/expression.c
Florian Festi 443474
+++ b/rpmio/expression.c
Florian Festi 443474
@@ -477,7 +477,7 @@ static int rdToken(ParseState state)
Florian Festi 443474
       if (qtok == TOK_STRING) {
Florian Festi 443474
 	v = valueMakeString(temp);
Florian Festi 443474
       } else {
Florian Festi 443474
-	v = valueMakeVersion(temp);
Florian Festi 443474
+	v = valueMakeVersion(state->flags & RPMEXPR_DISCARD ? "0" : temp);
Florian Festi 443474
         free(temp); /* version doesn't take ownership of the string */
Florian Festi 443474
         if (v == 0) {
Florian Festi 443474
 	  exprErr(state, _("invalid version"), p+1);
Florian Festi 443474
diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at
Florian Festi 443474
index d1490b4d9..c4376d49e 100644
Florian Festi 443474
--- a/tests/rpmmacro.at
Florian Festi 443474
+++ b/tests/rpmmacro.at
Florian Festi 443474
@@ -533,6 +533,7 @@ runroot rpm \
Florian Festi 443474
     --eval '%["%{aaa}"]' \
Florian Festi 443474
     --eval '%[%{?ccc}]' \
Florian Festi 443474
     --eval '%[v"1:2.3-4"]' \
Florian Festi 443474
+    --eval '%[v"0" && v"0"]' \
Florian Festi 443474
 ]],
Florian Festi 443474
 [0],
Florian Festi 443474
 [4096
Florian Festi 443474
@@ -542,6 +543,7 @@ runroot rpm \
Florian Festi 443474
 5
Florian Festi 443474
 0
Florian Festi 443474
 1:2.3-4
Florian Festi 443474
+0
Florian Festi 443474
 ],
Florian Festi 443474
 [])
Florian Festi 443474
 AT_CLEANUP
Florian Festi 443474
-- 
Florian Festi 443474
2.41.0
Florian Festi 443474