[Libosinfo] [PATCH 4/4] loader: treat zero length file as an entity blackout
Daniel P. Berrange
berrange at redhat.com
Tue Oct 20 13:02:36 UTC 2015
If the user creates a zero length XML file, this should override
the equivalent filename in an earlier directory, but should not
itself be loaded. This functions as a blackout, allowing the
user to hide content provided by the system.
---
osinfo/osinfo_loader.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index a5e26ad..10b9fff 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1859,7 +1859,7 @@ osinfo_loader_process_file_reg_pci(OsinfoLoader *loader,
err);
}
-static void
+static int
osinfo_loader_process_file_reg_xml(OsinfoLoader *loader,
GFile *base,
GFile *file,
@@ -1871,7 +1871,10 @@ osinfo_loader_process_file_reg_xml(OsinfoLoader *loader,
g_file_load_contents(file, NULL, &xml, &xmlLen, NULL, err);
if (error_is_set(err))
- return;
+ return -1;
+
+ if (xmlLen == 0)
+ return 0; /* zero length file treated as a black-list */
relpath = g_file_get_relative_path(base, file);
if (relpath == NULL) {
@@ -1887,6 +1890,7 @@ osinfo_loader_process_file_reg_xml(OsinfoLoader *loader,
g_free(uri);
g_free(xml);
g_free(relpath);
+ return 1;
}
@@ -2130,19 +2134,28 @@ static void osinfo_loader_process_list(OsinfoLoader *loader,
while (g_hash_table_iter_next(&iter, &key, &value)) {
OsinfoLoaderEntityFiles *files = value;
GList *tmpl;
+ gboolean blackout = FALSE;
if (files->master) {
- osinfo_loader_process_file_reg_xml(loader,
- g_object_get_data(G_OBJECT(files->master), "base"),
- files->master, &lerr);
+ int ret = osinfo_loader_process_file_reg_xml(loader,
+ g_object_get_data(G_OBJECT(files->master), "base"),
+ files->master, &lerr);
if (lerr) {
g_propagate_error(err, lerr);
break;
}
+ if (ret == 0) {
+ blackout = TRUE;
+ }
}
tmpl = files->extensions;
while (tmpl) {
GFile *file = tmpl->data;
+ if (blackout) {
+ gchar *path = g_file_get_path(file);
+ g_warning("Entity master file blackout but extension %s found",
+ path);
+ }
osinfo_loader_process_file_reg_xml(loader,
g_object_get_data(G_OBJECT(file), "base"),
file,
--
2.4.3
More information about the Libosinfo
mailing list