summaryrefslogtreecommitdiffstats
path: root/src/indmanager
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@redhat.com>2013-11-15 17:44:07 +0100
committerTomas Bzatek <tbzatek@redhat.com>2013-11-15 17:44:35 +0100
commitaa9cdfa38d112dbfd7805959d9892d1d572b2370 (patch)
treec947f9074d91389b459cc4ef6f0db5e6e59f9b49 /src/indmanager
parent21075e959a4ce4ebed5be73d2b8d081f3620051e (diff)
downloadopenlmi-providers-aa9cdfa38d112dbfd7805959d9892d1d572b2370.tar.gz
openlmi-providers-aa9cdfa38d112dbfd7805959d9892d1d572b2370.tar.xz
openlmi-providers-aa9cdfa38d112dbfd7805959d9892d1d572b2370.zip
indmanager: Handle bad select expressions when adding a filter
Fix for a random crash triggered by malformed select expression.
Diffstat (limited to 'src/indmanager')
-rw-r--r--src/indmanager/ind_manager.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/indmanager/ind_manager.c b/src/indmanager/ind_manager.c
index 46c94eb..446137d 100644
--- a/src/indmanager/ind_manager.c
+++ b/src/indmanager/ind_manager.c
@@ -919,17 +919,25 @@ bool _im_add_filter(IMManager *manager, CMPISelectExp *se, IMError *err)
*err = IM_ERR_MALLOC;
return false;
}
+ CMPIObjectPath *op = get_object_path(manager->broker, se);
+ if (!op) {
+ *err = IM_ERR_SELECT_EXP;
+ free(ses);
+ return false;
+ }
if(!manager->filters) {
DEBUG("This is the first filter creation");
IMFilters *filters = malloc(sizeof(IMFilters));
if (!filters) {
*err = IM_ERR_MALLOC;
+ CMRelease(op);
free(ses);
return false;
}
if (!(filters->class_name = get_classname(se))) {
*err = IM_ERR_MALLOC;
+ CMRelease(op);
free(ses);
free(filters);
return false;
@@ -948,17 +956,19 @@ bool _im_add_filter(IMManager *manager, CMPISelectExp *se, IMError *err)
IMFilter *next = malloc(sizeof(IMFilter));
if (!next) {
*err = IM_ERR_MALLOC;
+ CMRelease(op);
free(ses);
return false;
}
next->next = NULL;
next->select_exp_string = ses;
- next->op = CMClone(get_object_path(manager->broker, se), NULL);
+ next->op = CMClone(op, NULL);
if (prev) {
prev->next = next;
} else {
manager->filters->first = next;
}
+ CMRelease(op);
return true;
}