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
|