Upstream-Status: Backport Signed-off-by: Jack Mitchell --- 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 #include #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