osaf/tools/safimm/immcfg/imm_import.cc |  16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)


diff --git a/osaf/tools/safimm/immcfg/imm_import.cc 
b/osaf/tools/safimm/immcfg/imm_import.cc
--- a/osaf/tools/safimm/immcfg/imm_import.cc
+++ b/osaf/tools/safimm/immcfg/imm_import.cc
@@ -284,6 +284,9 @@ static void free_parserState(ParserState
        state->classAttrTypeMap.clear();
        state->adminOwnerSetSet.clear();
 
+       free(state->attrDefaultValueBuffer);
+       state->attrDefaultValueBuffer = NULL;
+
        {
                std::list<SaImmAttrDefinitionT_2>::iterator it;
                it = state->attrDefinitions.begin();
@@ -2246,6 +2249,7 @@ static void addClassAttributeDefinition(
                        LOG_ER("Failed to parse default value of attribute %s", 
state->attrName);
                        stopParser(state);
                        state->parsingStatus = 1;
+                       return;
                }
        } else {
                attrDefinition.attrDefaultValue = NULL;
@@ -2281,31 +2285,26 @@ static int charsToValueHelper(SaImmAttrV
                *value = malloc(sizeof(SaInt32T));
                *((SaInt32T*)*value) = (SaInt32T)strtol(str, &endMark, 0);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SAUINT32T:
                *value = malloc(sizeof(SaUint32T));
                *((SaUint32T*)*value) = (SaUint32T)strtoul(str, &endMark, 0);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SAINT64T:
                *value = malloc(sizeof(SaInt64T));
                *((SaInt64T*)*value) = (SaInt64T)strtoll(str, &endMark, 0);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SAUINT64T:
                *value = malloc(sizeof(SaUint64T));
                *((SaUint64T*)*value) = (SaUint64T)strtoull(str, &endMark, 0);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SATIMET: // Int64T
                *value = malloc(sizeof(SaInt64T));
                *((SaTimeT*)*value) = (SaTimeT)strtoll(str, &endMark, 0);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SANAMET:
                len = strlen(str);
@@ -2322,13 +2321,11 @@ static int charsToValueHelper(SaImmAttrV
                *value = malloc(sizeof(SaFloatT));
                *((SaFloatT*)*value) = (SaFloatT)strtof(str, &endMark);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SADOUBLET:
                *value = malloc(sizeof(SaDoubleT));
                *((SaDoubleT*)*value) = (SaDoubleT)strtod(str, &endMark);
                rc = *endMark != 0;
-               if(rc) free(*value);
                break;
        case SA_IMM_ATTR_SASTRINGT:
                len = strlen(str);
@@ -2365,6 +2362,11 @@ static int charsToValueHelper(SaImmAttrV
                return -1;
        }
 
+       if(rc) {
+               free(*value);
+               *value = NULL;
+       }
+
        return rc;
 }
 

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to