Igor Gnatenko 0bd7f8d
From 849f65b2466cf15042596119a2703cc6eac67e8c Mon Sep 17 00:00:00 2001
Igor Gnatenko 0bd7f8d
From: Igor Gnatenko <ignatenko@redhat.com>
Igor Gnatenko 0bd7f8d
Date: Thu, 9 Mar 2017 07:39:49 +0100
Igor Gnatenko 0bd7f8d
Subject: [PATCH 2/3] always allocate memory for reldep
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
Currently if we try to create reldep from "foo = 1" and foo is
Igor Gnatenko 0bd7f8d
not in sack, it would say that it can't create it. But this is wrong,
Igor Gnatenko 0bd7f8d
because reldep is something abstract and we should check that it doesn't
Igor Gnatenko 0bd7f8d
match anything in query/selector rather than just try to find it immediately.
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
When we process rich deps, we blindly allocate memory for reldep
Igor Gnatenko 0bd7f8d
because we don't know in advance whether it exists or not.
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
Libsolv doesn't have any function to validate correctness of name, so we can't
Igor Gnatenko 0bd7f8d
do much (it takes care of parsing rpm-md, so it doesn't check there).
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
Closes: #266
Igor Gnatenko 0bd7f8d
Approved by: j-mracek
Igor Gnatenko 0bd7f8d
---
Igor Gnatenko 0bd7f8d
 src/python/reldep-py.c            |  4 ----
Igor Gnatenko 0bd7f8d
 src/reldep.c                      |  6 +-----
Igor Gnatenko 0bd7f8d
 tests/python/tests/test_reldep.py | 23 +++++++++--------------
Igor Gnatenko 0bd7f8d
 tests/test_selector.c             |  7 +++++--
Igor Gnatenko 0bd7f8d
 4 files changed, 15 insertions(+), 25 deletions(-)
Igor Gnatenko 0bd7f8d
Igor Gnatenko 0bd7f8d
diff --git a/src/python/reldep-py.c b/src/python/reldep-py.c
Igor Gnatenko 0bd7f8d
index 08229f3..c22a1b8 100644
Igor Gnatenko 0bd7f8d
--- a/src/python/reldep-py.c
Igor Gnatenko 0bd7f8d
+++ b/src/python/reldep-py.c
Igor Gnatenko 0bd7f8d
@@ -134,10 +134,6 @@ reldep_init(_ReldepObject *self, PyObject *args, PyObject *kwds)
Igor Gnatenko 0bd7f8d
     solv_free(name);
Igor Gnatenko 0bd7f8d
     solv_free(evr);
Igor Gnatenko 0bd7f8d
     Py_XDECREF(tmp_py_str);
Igor Gnatenko 0bd7f8d
-    if (self->reldep == NULL) {
Igor Gnatenko 0bd7f8d
-	PyErr_Format(HyExc_Value, "No such reldep: %s", reldep_str);
Igor Gnatenko 0bd7f8d
-	return -1;
Igor Gnatenko 0bd7f8d
-    }
Igor Gnatenko 0bd7f8d
     return 0;
Igor Gnatenko 0bd7f8d
 }
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
diff --git a/src/reldep.c b/src/reldep.c
Igor Gnatenko 0bd7f8d
index d354f00..0784367 100644
Igor Gnatenko 0bd7f8d
--- a/src/reldep.c
Igor Gnatenko 0bd7f8d
+++ b/src/reldep.c
Igor Gnatenko 0bd7f8d
@@ -73,11 +73,7 @@ HyReldep
Igor Gnatenko 0bd7f8d
 hy_reldep_create(HySack sack, const char *name, int cmp_type, const char *evr)
Igor Gnatenko 0bd7f8d
 {
Igor Gnatenko 0bd7f8d
     Pool *pool = sack_pool(sack);
Igor Gnatenko 0bd7f8d
-    Id id = pool_str2id(pool, name, 0);
Igor Gnatenko 0bd7f8d
-
Igor Gnatenko 0bd7f8d
-    if (id == STRID_NULL || id == STRID_EMPTY)
Igor Gnatenko 0bd7f8d
-	// stop right there, this will never match anything.
Igor Gnatenko 0bd7f8d
-	return NULL;
Igor Gnatenko 0bd7f8d
+    Id id = pool_str2id(pool, name, 1);
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
     if (evr) {
Igor Gnatenko 0bd7f8d
 	assert(cmp_type);
Igor Gnatenko 0bd7f8d
diff --git a/tests/python/tests/test_reldep.py b/tests/python/tests/test_reldep.py
Igor Gnatenko 0bd7f8d
index 2232d4c..f0bb1a9 100644
Igor Gnatenko 0bd7f8d
--- a/tests/python/tests/test_reldep.py
Igor Gnatenko 0bd7f8d
+++ b/tests/python/tests/test_reldep.py
Igor Gnatenko 0bd7f8d
@@ -35,20 +35,15 @@ class Reldep(base.TestCase):
Igor Gnatenko 0bd7f8d
         reldep = requires[0]
Igor Gnatenko 0bd7f8d
         self.assertEqual(str(reldep), "P-lib >= 3")
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
-    def test_unicode(self):
Igor Gnatenko 0bd7f8d
-        reldep_str = u"\u0159 >= 3"
Igor Gnatenko 0bd7f8d
-        self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
Igor Gnatenko 0bd7f8d
-                          reldep_str)
Igor Gnatenko 0bd7f8d
-
Igor Gnatenko 0bd7f8d
     def test_custom_creation(self):
Igor Gnatenko 0bd7f8d
         reldep_str = "P-lib >= 3"
Igor Gnatenko 0bd7f8d
         reldep = hawkey.Reldep(self.sack, reldep_str)
Igor Gnatenko 0bd7f8d
         self.assertEqual(reldep_str, str(reldep))
Igor Gnatenko 0bd7f8d
+        reldep_str = "lane = 4"
Igor Gnatenko 0bd7f8d
+        reldep = hawkey.Reldep(self.sack, reldep_str)
Igor Gnatenko 0bd7f8d
+        self.assertEqual(reldep_str, str(reldep))
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
     def test_custom_creation_fail(self):
Igor Gnatenko 0bd7f8d
-        reldep_str = "lane = 4"
Igor Gnatenko 0bd7f8d
-        self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
Igor Gnatenko 0bd7f8d
-                          reldep_str)
Igor Gnatenko 0bd7f8d
         reldep_str = "P-lib >="
Igor Gnatenko 0bd7f8d
         self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
Igor Gnatenko 0bd7f8d
                           reldep_str)
Igor Gnatenko 0bd7f8d
@@ -63,6 +58,12 @@ class Reldep(base.TestCase):
Igor Gnatenko 0bd7f8d
         reldep = hawkey.Reldep(self.sack, "P-lib < 3-3")
Igor Gnatenko 0bd7f8d
         q = hawkey.Query(self.sack).filter(provides=reldep)
Igor Gnatenko 0bd7f8d
         self.assertLength(q, 0)
Igor Gnatenko 0bd7f8d
+        reldep = hawkey.Reldep(self.sack, u"\u0159 >= 3")
Igor Gnatenko 0bd7f8d
+        q = hawkey.Query(self.sack).filter(provides=reldep)
Igor Gnatenko 0bd7f8d
+        self.assertLength(q, 0)
Igor Gnatenko 0bd7f8d
+        reldep = hawkey.Reldep(self.sack, "foo >= 1.0-1.fc20")
Igor Gnatenko 0bd7f8d
+        q = hawkey.Query(self.sack).filter(provides=reldep)
Igor Gnatenko 0bd7f8d
+        self.assertLength(q, 0)
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
     def test_query_name_only(self):
Igor Gnatenko 0bd7f8d
         reldep_str = "P-lib"
Igor Gnatenko 0bd7f8d
@@ -74,9 +75,3 @@ class Reldep(base.TestCase):
Igor Gnatenko 0bd7f8d
 
Igor Gnatenko 0bd7f8d
     def test_not_crash(self):
Igor Gnatenko 0bd7f8d
         self.assertRaises(ValueError, hawkey.Reldep)
Igor Gnatenko 0bd7f8d
-
Igor Gnatenko 0bd7f8d
-    def test_non_num_version(self):
Igor Gnatenko 0bd7f8d
-        reldep_str = 'foo >= 1.0-1.fc20'
Igor Gnatenko 0bd7f8d
-        with self.assertRaises(hawkey.ValueException) as ctx:
Igor Gnatenko 0bd7f8d
-            hawkey.Reldep(self.sack, reldep_str)
Igor Gnatenko 0bd7f8d
-        self.assertEqual(ctx.exception.args[0], "No such reldep: %s" % reldep_str)
Igor Gnatenko 0bd7f8d
diff --git a/tests/test_selector.c b/tests/test_selector.c
Igor Gnatenko 0bd7f8d
index 42915ab..8287546 100644
Igor Gnatenko 0bd7f8d
--- a/tests/test_selector.c
Igor Gnatenko 0bd7f8d
+++ b/tests/test_selector.c
Igor Gnatenko 0bd7f8d
@@ -41,8 +41,11 @@ END_TEST
Igor Gnatenko 0bd7f8d
 START_TEST(test_sltr_provides)
Igor Gnatenko 0bd7f8d
 {
Igor Gnatenko 0bd7f8d
     HySelector sltr = hy_selector_create(test_globals.sack);
Igor Gnatenko 0bd7f8d
-    ck_assert_int_eq(hy_selector_set(sltr, HY_PKG_PROVIDES, HY_EQ, "*"),
Igor Gnatenko 0bd7f8d
-		     HY_E_SELECTOR);
Igor Gnatenko 0bd7f8d
+    fail_if(hy_selector_set(sltr, HY_PKG_PROVIDES, HY_EQ, "*"));
Igor Gnatenko 0bd7f8d
+    HyPackageList plist = hy_selector_matches(sltr);
Igor Gnatenko 0bd7f8d
+    fail_unless(hy_packagelist_count(plist) == 0);
Igor Gnatenko 0bd7f8d
+
Igor Gnatenko 0bd7f8d
+    hy_packagelist_free(plist);
Igor Gnatenko 0bd7f8d
     hy_selector_free(sltr);
Igor Gnatenko 0bd7f8d
 }
Igor Gnatenko 0bd7f8d
 END_TEST
Igor Gnatenko 0bd7f8d
-- 
Igor Gnatenko 0bd7f8d
2.12.1
Igor Gnatenko 0bd7f8d