From: Fred L. Drake, Jr. Date: Fri, 19 Apr 2002 20:52:39 +0000 (+0000) Subject: Check in SF patch #476929: Fix XML_SetReturnNSTriplet(). X-Git-Tag: R_1_95_3~94 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=37371404cda00af28dcd9bf05d262b838a3916fd;p=libexpat Check in SF patch #476929: Fix XML_SetReturnNSTriplet(). This is slightly modified from the submitted patch to ensure a variable is never used uninitialized. Patch contributed by Karl Waclawek. --- diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c index 9faeab02..6a965158 100644 --- a/expat/lib/xmlparse.c +++ b/expat/lib/xmlparse.c @@ -1765,12 +1765,6 @@ doContent(XML_Parser parser, } --tagLevel; if (endElementHandler && tag->name.str) { - if (tag->name.localPart) { - XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen; - const XML_Char *from = tag->name.localPart; - while ((*to++ = *from++) != 0) - ; - } endElementHandler(handlerArg, tag->name.str); } else if (defaultHandler) @@ -1920,8 +1914,10 @@ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, int nDefaultAtts = 0; const XML_Char **appAtts; /* the attribute list for the application */ int attIndex = 0; + int prefixLen = 0; int i; int n; + XML_Char *uri; int nPrefixes = 0; BINDING *binding; const XML_Char *localPart; @@ -2123,6 +2119,13 @@ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, binding = dtd.defaultPrefix.binding; localPart = tagNamePtr->str; } + else + localPart = NULL; + if (ns && ns_triplets && binding->prefix->name) { + for (prefixLen = 0; binding->prefix->name[prefixLen++];) + ; + n += prefixLen; + } else return XML_ERROR_NONE; tagNamePtr->localPart = localPart; @@ -2132,7 +2135,7 @@ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, n = i + binding->uriLen; if (n > binding->uriAlloc) { TAG *p; - XML_Char *uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); + uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); if (!uri) return XML_ERROR_NO_MEMORY; binding->uriAlloc = n + EXPAND_SPARE; @@ -2143,7 +2146,13 @@ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, FREE(binding->uri); binding->uri = uri; } - memcpy(binding->uri + binding->uriLen, localPart, i * sizeof(XML_Char)); + uri = binding->uri + binding->uriLen; + memcpy(uri, localPart, i * sizeof(XML_Char)); + if (prefixLen) { + uri = uri + (i - 1); + if (namespaceSeparator) { *(uri) = namespaceSeparator; } + memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); + } tagNamePtr->str = binding->uri; return XML_ERROR_NONE; }