summaryrefslogtreecommitdiff
path: root/external/libxmlsec/xmlsec1-ooxml.patch.1
diff options
context:
space:
mode:
Diffstat (limited to 'external/libxmlsec/xmlsec1-ooxml.patch.1')
-rw-r--r--external/libxmlsec/xmlsec1-ooxml.patch.184
1 files changed, 73 insertions, 11 deletions
diff --git a/external/libxmlsec/xmlsec1-ooxml.patch.1 b/external/libxmlsec/xmlsec1-ooxml.patch.1
index a673416baa17..a0878a5222d3 100644
--- a/external/libxmlsec/xmlsec1-ooxml.patch.1
+++ b/external/libxmlsec/xmlsec1-ooxml.patch.1
@@ -1,4 +1,4 @@
-From 7e46355a9a7a223077f4d83587fd842bbaf97e37 Mon Sep 17 00:00:00 2001
+From 24c1395c547f8a2f0c78a8618c766ecd55909c66 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Mon, 25 Jan 2016 09:50:03 +0100
Subject: [PATCH] OOXML Relationship Transform
@@ -8,8 +8,8 @@ Subject: [PATCH] OOXML Relationship Transform
include/xmlsec/transforms.h | 4 +
src/strings.c | 3 +
src/transforms.c | 11 +
- src/xpath.c | 480 ++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 501 insertions(+)
+ src/xpath.c | 542 ++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 563 insertions(+)
diff --git a/include/xmlsec/strings.h b/include/xmlsec/strings.h
index 07afb9d..9c72d1b 100644
@@ -77,7 +77,7 @@ index 2ed3fe8..9e5ad27 100644
if(xmlSecTransformIdsRegister(xmlSecTransformXsltId) < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
diff --git a/src/xpath.c b/src/xpath.c
-index 8b0b4f8..e56920e 100644
+index 8b0b4f8..b9a03e5 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -17,6 +17,7 @@
@@ -88,7 +88,7 @@ index 8b0b4f8..e56920e 100644
#include <xmlsec/xmlsec.h>
#include <xmlsec/xmltree.h>
-@@ -1144,5 +1145,484 @@ xmlSecTransformVisa3DHackExecute(xmlSecTransformPtr transform, int last,
+@@ -1144,5 +1145,546 @@ xmlSecTransformVisa3DHackExecute(xmlSecTransformPtr transform, int last,
return(0);
}
@@ -271,10 +271,10 @@ index 8b0b4f8..e56920e 100644
+ xmlOutputBufferWriteString(buf, (const char *)xmlGetProp(cur, attr->name));
+ xmlOutputBufferWriteString(buf, "\"");
+ }
-
++
+ if (strcmp(cur->name, "Relationship") == 0 && !foundTargetMode)
+ xmlOutputBufferWriteString(buf, " TargetMode=\"Internal\"");
-
++
+ xmlOutputBufferWriteString(buf, ">");
+
+ if (cur->children)
@@ -331,17 +331,79 @@ index 8b0b4f8..e56920e 100644
+ return 0;
+}
+
++/* Sorts Relationship elements by Id value in lexicographical order. */
++static int xmlSecTransformRelationshipCompare(xmlNodePtr node1, xmlNodePtr node2)
++{
++ xmlChar* id1;
++ xmlChar* id2;
++
++ if (node1 == node2)
++ return 0;
++ if (!node1)
++ return -1;
++ if (!node2)
++ return 1;
++
++ id1 = xmlGetProp(node1, "Id");
++ id2 = xmlGetProp(node2, "Id");
++
++ if (!id1)
++ return -1;
++ if (!id2)
++ return 1;
++
++ return xmlStrcmp(id1, id2);
++}
++
+int xmlSecTransformRelationshipProcessNodeList(xmlSecTransformPtr transform, xmlOutputBufferPtr buf, xmlNodePtr cur)
+{
++ xmlListPtr list;
+ int ret;
+
-+ for (ret = 0; cur; cur = cur->next)
++ list = xmlListCreate(NULL, (xmlListDataCompare)xmlSecTransformRelationshipCompare);
++ if (!list)
++ return -1;
++
++ for (; cur; cur = cur->next)
+ {
-+ ret = xmlSecTransformRelationshipProcessNode(transform, buf, cur);
-+ if (ret < 0)
-+ return -1;
++ if (strcmp(cur->name, "Relationship") == 0)
++ xmlListInsert(list, cur);
++ else
++ {
++ ret = xmlSecTransformRelationshipProcessNode(transform, buf, cur);
++ if (ret < 0)
++ {
++ xmlListDelete(list);
++ return -1;
++ }
++ }
++ }
++
++ if (!xmlListEmpty(list))
++ {
++ int size;
++ int i;
+
++ xmlListSort(list);
++ size = xmlListSize(list);
++ for (i = 0; i < size; ++i)
++ {
++ xmlLinkPtr link = xmlListFront(list);
++ xmlNodePtr node = (xmlNodePtr)xmlLinkGetData(link);
+
++ ret = xmlSecTransformRelationshipProcessNode(transform, buf, node);
++ if (ret < 0)
++ {
++ xmlListDelete(list);
++ return -1;
++ }
++
++ xmlListPopFront(list);
++ }
++
+ }
+
++ xmlListDelete(list);
+ return 0;
+}
+