From d34241d194ea35df773d481edf89dffb8782aa39 Mon Sep 17 00:00:00 2001 From: Alexey Makhalov <amakhalov@vmware.com> Date: Thu, 10 Nov 2016 17:58:54 -0800 Subject: [PATCH 3/6] Add N:M mapping support. Invert key-values. --- src/core.c | 8 ++++---- src/core.h | 5 +++-- src/main.c | 28 +++++++++++++++++++++------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/core.c b/src/core.c index 727ab8c..8f809a3 100644 --- a/src/core.c +++ b/src/core.c @@ -148,10 +148,10 @@ struct cve_entry_t *cve_db_get_cve(CveDB *self, char *id) return t; } -GList *cve_db_get_issues_frac_compare(CveDB *self, char *product, char *version) +GList *cve_db_get_issues_frac_compare(CveDB *self, char *product, char *version, GList *in) { int rc = 0; - GList *list = NULL; + GList *list = in; int ret = 0; if (!self || !self->db) { @@ -187,10 +187,10 @@ GList *cve_db_get_issues_frac_compare(CveDB *self, char *product, char *version) return list; } -GList *cve_db_get_issues(CveDB *self, char *product, char *version) +GList *cve_db_get_issues(CveDB *self, char *product, char *version, GList *in) { int rc = 0; - GList *list = NULL; + GList *list = in; if (!self || !self->db) { return NULL; diff --git a/src/core.h b/src/core.h index 48e295d..7a18b7d 100644 --- a/src/core.h +++ b/src/core.h @@ -84,8 +84,9 @@ struct cve_entry_t *cve_db_get_cve(CveDB *db, char *id); * * @return A newly allocated list of strings if found, otherwise NULL */ -GList *cve_db_get_issues(CveDB *db, char *product, char *version); -GList *cve_db_get_issues_frac_compare(CveDB *db, char *product, char *version); +GList *cve_db_get_issues(CveDB *db, char *product, char *version, GList *in); +GList *cve_db_get_issues_frac_compare(CveDB *db, char *product, char *version, + GList *in); /** * Util to free a struct cve_entry_t diff --git a/src/main.c b/src/main.c index 5bb16c9..5ee6adb 100644 --- a/src/main.c +++ b/src/main.c @@ -92,6 +92,8 @@ static void cve_add_package_internal(struct source_package_t *pkg) GList *issues = NULL, *em = NULL; gchar *cur_id = NULL; gchar *q = NULL; + int i = 0; + gchar **t; CvePlugin *pkg_plugin = self_priv->pkg_plugin; if (!pkg) { @@ -107,11 +109,24 @@ static void cve_add_package_internal(struct source_package_t *pkg) q = g_hash_table_lookup(self->mapping, pkg->name); } - if (use_frac_compare) { - issues = cve_db_get_issues_frac_compare(self->cve_db, q ? q : pkg->name, pkg->version); - } else { - issues = cve_db_get_issues(self->cve_db, q ? q : pkg->name, pkg->version); - } + if (!q) + q = pkg->name; + + t = g_strsplit(q, " ", 10); + while (t[i]) { + if (strlen(t[i]) == 0) { + i++; + continue; + } + if (use_frac_compare) + issues = cve_db_get_issues_frac_compare(self->cve_db, + t[i], pkg->version, issues); + else + issues = cve_db_get_issues(self->cve_db, t[i], + pkg->version, issues); + i++; + } + g_strfreev(t); if (!issues) { goto insert; @@ -665,8 +680,7 @@ int main(int argc, char **argv) fprintf(stderr, "Unable to load mapping string: %s\n", error->message); goto cleanup; } - /* Reverse the mapping */ - g_hash_table_insert(self->mapping, g_strdup(val), g_strdup(*c)); + g_hash_table_insert(self->mapping, g_strdup(*c), g_strdup(val)); ++c; } } -- 2.10.1