[Rpm-maint] [PATCH] Do not let 'rpm -q foo-' find package 'foo'.

Ales Kozumplik akozumpl at redhat.com
Tue Nov 8 08:01:59 UTC 2011


- Includes a test suite for the case.
---
 lib/rpmdb.c    |    8 ++++----
 tests/rpmdb.at |   39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/lib/rpmdb.c b/lib/rpmdb.c
index 92b2d5d..4e73cac 100644
--- a/lib/rpmdb.c
+++ b/lib/rpmdb.c
@@ -1142,9 +1142,9 @@ static rpmRC dbiFindByLabel(rpmdb db, dbiIndex dbi, const char * arg,
 	    if (c != '[') brackets = 0;
 	    break;
 	}
-	c = *s;
-	if (!brackets && *s == '-')
+	if (!brackets && c && *s == '-')
 	    break;
+	c = *s;
     }
 
    	/* FIX: *matches may be NULL. */
@@ -1175,9 +1175,9 @@ static rpmRC dbiFindByLabel(rpmdb db, dbiIndex dbi, const char * arg,
 	    if (c != '[') brackets = 0;
 	    break;
 	}
-	c = *s;
-	if (!brackets && *s == '-')
+	if (!brackets && c && *s == '-')
 	    break;
+	c = *s;
     }
 
     if (s == localarg) {
diff --git a/tests/rpmdb.at b/tests/rpmdb.at
index cecd355..461bd9c 100644
--- a/tests/rpmdb.at
+++ b/tests/rpmdb.at
@@ -44,6 +44,45 @@ runroot rpm \
 [0])
 AT_CLEANUP
 
+# ------------------------------
+# Run rpm -q <package> where <package> exists in the db.
+AT_SETUP([rpm -q foo])
+AT_KEYWORDS([rpmdb query])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -i \
+  /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo
+
+],
+[0],
+[foo-1.0-1.noarch
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Run rpm -q <package>- where <package> exists in the db.
+AT_SETUP([rpm -q foo-])
+AT_KEYWORDS([rpmdb query])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -i \
+  /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo-
+
+],
+[1],
+[package foo- is not installed
+],
+[])
+AT_CLEANUP
 
 # ------------------------------
 # install a noarch package into a local rpmdb without --relocate and --nodeps
-- 
1.7.6.4



More information about the Rpm-maint mailing list