Ack from me. Code review only. Not tested. We should do an enhancement later where we allocate 'state->objectName' only once statically to kOsafMaxDnLength and re-use it.
/AndersBj -----Original Message----- From: Zoran Milinkovic [mailto:[email protected]] Sent: den 3 oktober 2014 02:34 To: [email protected] Cc: [email protected] Subject: [devel] [PATCH 1 of 2] imm: fix loading long data in immload [#1130] osaf/services/saf/immsv/immloadd/imm_loader.cc | 66 +++++++++++++++++++++---- 1 files changed, 54 insertions(+), 12 deletions(-) DNs and attribute names could be partially loaded due to buffer size in libxml. The patch merges character fragments. diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.cc b/osaf/services/saf/immsv/immloadd/imm_loader.cc --- a/osaf/services/saf/immsv/immloadd/imm_loader.cc +++ b/osaf/services/saf/immsv/immloadd/imm_loader.cc @@ -904,6 +904,15 @@ static void startElementHandler(void* us } else if (strcmp((const char*)name, "dn") == 0) { + assert(state->depth > 0); + assert(state->objectName == NULL); + + if (state->state[state->depth - 1] != OBJECT) + { + LOG_ER("DN not immediately inside an object tag"); + exit(1); + } + state->state[state->depth] = DN; /* <attr> */ } @@ -922,6 +931,15 @@ static void startElementHandler(void* us } else if (strcmp((const char*)name, "name") == 0) { + assert(state->depth > 0); + assert(state->attrName == NULL); + + if (state->state[state->depth - 1] != ATTRIBUTE && state->state[state->depth - 1] != RDN) + { + LOG_ER("Name not immediately inside an attribute tag"); + exit(1); + } + state->state[state->depth] = NAME; /* <value> */ } @@ -1387,20 +1405,38 @@ static void charactersHandler(void* user case ATTRIBUTE: break; case DN: + if (len > kOsafMaxDnLength) + { + LOG_ER("DN is too long (%d characters)", len); + exit(1); + } + /* Copy the distinguished name */ - state->objectName = (char*)malloc((size_t)len + 1); - - strncpy(state->objectName, (const char*)chars, (size_t)len); - - state->objectName[len] = '\0'; + if(state->objectName) + { + state->objectName = (char *)realloc(state->objectName, strlen(state->objectName) + len + 1); + if (state->attrName == NULL) + { + LOG_ER("Failed to realloc state->objectName"); + exit(1); + } + strncat(state->objectName, (const char*)chars, (size_t)len); + } + else + { + state->objectName = (char*)malloc((size_t)len + 1); + if (state->attrName == NULL) + { + LOG_ER("Failed to malloc state->objectName"); + exit(1); + } + strncpy(state->objectName, (const char*)chars, (size_t)len); + state->objectName[len] = '\0'; + } break; case NAME: - /* The attrName must be NULL */ - assert(!state->attrName); - - if (state->state[state->depth - 1] == ATTRIBUTE || - state->state[state->depth - 1] == RDN) + if (!state->attrName) { state->attrName = (char*)malloc((size_t)len + 1); if (state->attrName == NULL) @@ -1414,8 +1450,14 @@ static void charactersHandler(void* user } else { - LOG_ER("Name not immediately inside an attribute tag"); - exit(1); + state->attrName = (char*)realloc(state->attrName, strlen(state->attrName) + len + 1); + if (state->attrName == NULL) + { + LOG_ER("Failed to realloc state->attrName"); + exit(1); + } + + strncat(state->attrName, (const char*)chars, len); } break; case VALUE: ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
