osaf/tools/safimm/src/immutil.c |  55 +++++++++++++++++++++++++++-------------
 1 files changed, 37 insertions(+), 18 deletions(-)


Fix crashing problem when bad SaNameT value is used in immutils.

diff --git a/osaf/tools/safimm/src/immutil.c b/osaf/tools/safimm/src/immutil.c
--- a/osaf/tools/safimm/src/immutil.c
+++ b/osaf/tools/safimm/src/immutil.c
@@ -181,6 +181,7 @@ CcbUtilOperationData_t *ccbutil_ccbAddCr
        operation->param.create.attrValues = dupSaImmAttrValuesT_array(clist, 
attrValues);
 
        str = saAisNameBorrow(objectName);
+       assert(str != NULL);
        len = strlen(str);
        saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
&operation->objectName);
 
@@ -196,6 +197,7 @@ void ccbutil_ccbAddDeleteOperation(struc
        operation->param.deleteOp.objectName = dupSaNameT(clist, objectName);
 
        str = saAisNameBorrow(objectName);
+       assert(str != NULL);
        len = strlen(str);
        saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
&operation->objectName);
 }
@@ -217,6 +219,7 @@ int ccbutil_ccbAddModifyOperation(struct
        operation->param.modify.attrMods = 
dupSaImmAttrModificationT_array(clist, attrMods);
 
        str = saAisNameBorrow(objectName);
+       assert(str != NULL);
        len = strlen(str);
        saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
&operation->objectName);
 
@@ -225,26 +228,28 @@ int ccbutil_ccbAddModifyOperation(struct
 
 CcbUtilOperationData_t *ccbutil_getNextCcbOp(SaImmOiCcbIdT ccbId, 
CcbUtilOperationData_t *opData)
 {
-        if (opData == NULL) {
-                CcbUtilCcbData_t *ccb = ccbutil_getCcbData(ccbId);
-                return ccb->operationListHead;
-        }
-        else
-                return opData->next;
+       if (opData == NULL) {
+               CcbUtilCcbData_t *ccb = ccbutil_getCcbData(ccbId);
+               return ccb->operationListHead;
+       }
+       else
+               return opData->next;
 }
 
 CcbUtilOperationData_t *ccbutil_getCcbOpDataByDN(SaImmOiCcbIdT ccbId, const 
SaNameT *dn)
 {
-        CcbUtilOperationData_t *opData = ccbutil_getNextCcbOp(ccbId, NULL);
+       CcbUtilOperationData_t *opData = ccbutil_getNextCcbOp(ccbId, NULL);
+       const char *dnStr = saAisNameBorrow(dn);
+       assert(dnStr != NULL);
 
-        while (opData != NULL) {
-               if (strcmp(saAisNameBorrow(dn), 
saAisNameBorrow(&opData->objectName)) == 0)
-                        break;
+       while (opData != NULL) {
+               if (strcmp(dnStr, saAisNameBorrow(&opData->objectName)) == 0)
+                       break;
 
-                opData = ccbutil_getNextCcbOp(ccbId, opData);
-        }
+               opData = ccbutil_getNextCcbOp(ccbId, opData);
+       }
 
-        return opData;
+       return opData;
 }
 
 /* ----------------------------------------------------------------------
@@ -296,6 +301,7 @@ char const *immutil_getStringValue(char 
        unsigned int klen;
        char *cp;
 
+       assert(buffer != NULL);
        assert(key != NULL);
        klen = strlen(key);
        assert(klen > 1 || key[klen - 1] == '=');
@@ -322,10 +328,13 @@ char const *immutil_getDnItem(SaNameT co
        static char* buffer = NULL;
        char *cp;
        char *value;
-       size_t size = strlen(saAisNameBorrow(name)) + 1;
+       size_t size;
+       const char *objName = saAisNameBorrow(name);
+       assert(objName != NULL);
 
+       size = strlen(objName) + 1;
        buffer = realloc(buffer, size);
-       memcpy(buffer, saAisNameBorrow(name), size);
+       memcpy(buffer, objName, size);
        value = buffer;
        cp = strchr(value, ',');
        while (index > 0) {
@@ -518,6 +527,7 @@ int immutil_matchName(SaNameT const *nam
        const char* buffer;
        assert(name != NULL && preg != NULL);
        buffer = saAisNameBorrow(name);
+       assert(buffer != NULL);
        return regexec(preg, buffer, 0, NULL, 0);
 }
 
@@ -548,13 +558,18 @@ SaImmClassNameT immutil_get_className(co
        SaImmAttrValuesT_2 **attributes;
        SaImmAttrNameT attributeNames[] = { "SaImmAttrClassName", NULL };
 
-       (void)immutil_saImmOmInitialize(&omHandle, NULL, &immVersion);
-       (void)immutil_saImmOmAccessorInitialize(omHandle, &accessorHandle);
+       if(immutil_saImmOmInitialize(&omHandle, NULL, &immVersion) != SA_AIS_OK)
+               goto done;
+       if(immutil_saImmOmAccessorInitialize(omHandle, &accessorHandle) != 
SA_AIS_OK)
+               goto finalize_om_handle;
        if (immutil_saImmOmAccessorGet_2(accessorHandle, objectName, 
attributeNames, &attributes) == SA_AIS_OK)
                className = strdup(*((char **)attributes[0]->attrValues[0]));
        (void)immutil_saImmOmAccessorFinalize(accessorHandle);
+
+finalize_om_handle:
        (void)immutil_saImmOmFinalize(omHandle);
 
+done:
        return className;
 }
 
@@ -568,7 +583,9 @@ SaAisErrorT immutil_get_attrValueType(co
        SaImmAttrDefinitionT_2 **attrDefinitions;
        int i = 0;
 
-       (void)immutil_saImmOmInitialize(&omHandle, NULL, &immVersion);
+       if((rc = immutil_saImmOmInitialize(&omHandle, NULL, &immVersion)) != 
SA_AIS_OK) {
+               return rc;
+       }
 
        if ((rc = saImmOmClassDescriptionGet_2(omHandle, className, 
&classCategory, &attrDefinitions)) != SA_AIS_OK)
                goto done;
@@ -756,6 +773,7 @@ static const SaNameT *dupSaNameT(struct 
        if (original == NULL)
                return NULL;
        const char* value = saAisNameBorrow(original);
+       assert(value != NULL);
        copy = (SaNameT *)clistMalloc(clist, sizeof(SaNameT));
        saAisNameLend(strlen(value) < SA_MAX_UNEXTENDED_NAME_LENGTH ? value : 
dupStr(clist, value), copy);
        return copy;
@@ -842,6 +860,7 @@ static void copySaImmAttrValuesT(struct 
                        SaNameT* cporig = (SaNameT*) original->attrValues[i];
                        SaNameT* cpdest = (SaNameT*) copy->attrValues[i];
                        const char* value = saAisNameBorrow(cporig);
+                       assert(value != NULL);
                        saAisNameLend(strlen(value) < 
SA_MAX_UNEXTENDED_NAME_LENGTH ? value :
                                dupStr(clist, value), cpdest);
                } else if(original->attrValueType == SA_IMM_ATTR_SAANYT) {

------------------------------------------------------------------------------
Slashdot TV.  Video for Nerds.  Stuff that Matters.
http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to