aboutsummaryrefslogtreecommitdiffstats
path: root/meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch
blob: 41bf4cc1d19aea904220c98dd478fe7568717b63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Upstream Status: Backport
Signed-off-by: Jack Mitchell <jack.mitchell@dbbroadcast.co.uk>
---
 src/xslt.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/xslt.c b/src/xslt.c
index 9d8d31a..58ca52d 100644
--- a/src/xslt.c
+++ b/src/xslt.c
@@ -23,6 +23,7 @@
 #include <libxslt/transform.h>
 #include <libxslt/xsltutils.h>
 #include "libstr.h"
+#include "liblist.h"
 #include "send.h"
 #include "log.h"
 #ifdef ENABLE_TOMAHAWK
@@ -343,10 +344,10 @@ bool can_transform_with_xslt(t_session *session) {
 static int apply_xslt_sheet(t_session *session, xmlDocPtr data_xml) {
 	xmlDocPtr style_xml, result_xml;
 	xsltStylesheetPtr xslt;
-	xmlOutputBufferPtr output;
+	xmlChar *raw_xml;
 	char value[VALUE_SIZE + 1];
 	const char **params;
-	int result = 200;
+	int result = 200, raw_size;
 
 	/* Read XML data
 	 */
@@ -396,14 +397,8 @@ static int apply_xslt_sheet(t_session *session, xmlDocPtr data_xml) {
 		xsltFreeStylesheet(xslt);
 		return 500;
 	}
-	if ((output = xmlAllocOutputBuffer(NULL)) == NULL) {
-		xmlFreeDoc(result_xml);
-		xsltFreeStylesheet(xslt);
-		return 500;
-	}
-    if (xsltSaveResultTo(output, result_xml, xslt) == -1) {
+	if (xsltSaveResultToString(&raw_xml, &raw_size, result_xml, xslt) == -1) {
 		log_file_error(session, session->file_on_disk, "transformation error");
-		xmlOutputBufferClose(output);
 		xmlFreeDoc(result_xml);
 		xsltFreeStylesheet(xslt);
 		return 500;
@@ -414,17 +409,17 @@ static int apply_xslt_sheet(t_session *session, xmlDocPtr data_xml) {
 	value[VALUE_SIZE] = '\0';
 	if (send_buffer(session, hs_conlen, 16) == -1) {
 		result = -1;
-	} else if (snprintf(value, VALUE_SIZE, "%d\r\n\r\n", output->buffer->use) == -1) {
+	} else if (snprintf(value, VALUE_SIZE, "%d\r\n\r\n", raw_size) == -1) {
 		result = -1;
 	} else if (send_buffer(session, value, strlen(value)) == -1) {
 		result = -1;
-	} else if (send_buffer(session, (char*)output->buffer->content, output->buffer->use) == -1) {
+	} else if (send_buffer(session, (char*)raw_xml, raw_size) == -1) {
 		result = -1;
 	}
 
 	/* Free buffers
 	 */
-	xmlOutputBufferClose(output);
+	xmlFree(raw_xml);
 	xmlFreeDoc(result_xml);
 	xsltFreeStylesheet(xslt);
 
-- 
1.8.0.1