You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
oath-toolkit/oath-toolkit-2.4.1-retain-o...

43 lines
1.2 KiB

--- a/libpskc/build.c
+++ a/libpskc/build.c
@@ -510,7 +510,7 @@ pskc_build_xml (pskc_t * container, char **out, size_t * len)
xmlDocSetRootElement (doc, keycont);
- if (container->xmldoc)
+ if (container->xmldoc && container->xmldoc != container->original_xmldoc)
xmlFreeDoc (container->xmldoc);
container->xmldoc = doc;
doc = NULL;
--- a/libpskc/internal.h
+++ a/libpskc/internal.h
@@ -103,7 +103,7 @@ struct pskc_key
struct pskc
{
/* raw XML */
- xmlDocPtr xmldoc;
+ xmlDocPtr xmldoc, original_xmldoc;
/* Is there a Signature element in xmldoc? */
int signed_p;
--- a/libpskc/parser.c
+++ a/libpskc/parser.c
@@ -677,6 +677,8 @@ pskc_done (pskc_t * container)
return;
xmlFreeDoc (container->xmldoc);
+ if (container->original_xmldoc != container->xmldoc)
+ xmlFreeDoc (container->original_xmldoc);
for (i = 0; i < container->nkeypackages; i++)
{
@@ -717,7 +719,7 @@ pskc_parse_from_memory (pskc_t * container, size_t len, const char *buffer)
if (xmldoc == NULL)
return PSKC_XML_ERROR;
- container->xmldoc = xmldoc;
+ container->original_xmldoc = container->xmldoc = xmldoc;
root = xmlDocGetRootElement (xmldoc);
parse_keycontainer (container, root, &rc);