diff options
author | Tomas Bzatek <tbzatek@redhat.com> | 2013-11-15 17:44:07 +0100 |
---|---|---|
committer | Tomas Bzatek <tbzatek@redhat.com> | 2013-11-15 17:44:35 +0100 |
commit | aa9cdfa38d112dbfd7805959d9892d1d572b2370 (patch) | |
tree | c947f9074d91389b459cc4ef6f0db5e6e59f9b49 /src/indmanager | |
parent | 21075e959a4ce4ebed5be73d2b8d081f3620051e (diff) | |
download | openlmi-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.c | 12 |
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; } |