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