diff options
Diffstat (limited to 'meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch')
-rw-r--r-- | meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch b/meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch new file mode 100644 index 0000000000..41bf4cc1d1 --- /dev/null +++ b/meta-webserver/recipes-httpd/hiawatha/files/xslt-fix.patch @@ -0,0 +1,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 + |