From 3b31eeaa86e89d571dda53b5b10442edcf11cacd Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 16 Dec 2013 12:34:44 +0000 Subject: [PATCH] Do not crash when querying provides that do not exist hy_reldep_create() returns NULL if nothing provides the name, so only add it to the reldeplist if it's going to exist. --- src/query.c | 3 ++- tests/test_query.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/query.c b/src/query.c index a43a2b0..8d5cf1d 100644 --- a/src/query.c +++ b/src/query.c @@ -1008,7 +1008,8 @@ hy_query_filter_provides_in(HyQuery q, char **reldep_strs) return HY_E_QUERY; } reldep = hy_reldep_create(q->sack, name, cmp_type, evr); - hy_reldeplist_add(reldeplist, reldep); + if (reldep) + hy_reldeplist_add(reldeplist, reldep); hy_reldep_free(reldep); solv_free(name); solv_free(evr); diff --git a/tests/test_query.c b/tests/test_query.c index c6c22f6..9c54086 100644 --- a/tests/test_query.c +++ b/tests/test_query.c @@ -370,6 +370,19 @@ START_TEST(test_query_provides_in) } END_TEST +START_TEST(test_query_provides_in_not_found) +{ + HyPackageList plist; + char* provides[] = { "thisisnotgoingtoexist", NULL }; + HyQuery q = hy_query_create(test_globals.sack); + hy_query_filter_provides_in(q, provides); + plist = hy_query_run(q); + fail_unless(hy_packagelist_count(plist) == 0); + hy_packagelist_free(plist); + hy_query_free(q); +} +END_TEST + START_TEST(test_query_fileprovides) { HyQuery q = hy_query_create(test_globals.sack); @@ -761,6 +774,7 @@ query_suite(void) tcase_add_test(tc, test_upgrades); tcase_add_test(tc, test_filter_latest); tcase_add_test(tc, test_query_provides_in); + tcase_add_test(tc, test_query_provides_in_not_found); suite_add_tcase(s, tc); tc = tcase_create("Main");