--- apache2/msc_crypt.c.orig 2012-10-18 10:42:43.381000000 +0100 +++ apache2/msc_crypt.c 2012-10-18 10:46:52.442000000 +0100 @@ -1079,6 +1079,70 @@ htmlDocContentDumpFormatOutput(output_buf, msr->crypto_html_tree, NULL, 0); +#ifdef LIBXML2_NEW_BUFFER + + if (output_buf->conv == NULL || (output_buf->conv && xmlOutputBufferGetSize(output_buf) == 0)) { + + if(output_buf->buffer == NULL || xmlOutputBufferGetSize(output_buf) == 0) { + xmlOutputBufferClose(output_buf); + xmlFreeDoc(msr->crypto_html_tree); + msr->of_stream_changed = 0; + return -1; + } + + if(msr->stream_output_data != NULL) { + free(msr->stream_output_data); + msr->stream_output_data = NULL; + } + + msr->stream_output_length = xmlOutputBufferGetSize(output_buf); + msr->stream_output_data = (char *)malloc(msr->stream_output_length+1); + + if (msr->stream_output_data == NULL) { + xmlOutputBufferClose(output_buf); + xmlFreeDoc(msr->crypto_html_tree); + return -1; + } + + memset(msr->stream_output_data, 0x0, msr->stream_output_length+1); + memcpy(msr->stream_output_data, xmlOutputBufferGetContent(output_buf), msr->stream_output_length); + + if (msr->txcfg->debuglog_level >= 4) + msr_log(msr, 4, "inject_encrypted_response_body: Copying XML tree from CONTENT to stream buffer [%d] bytes.", xmlOutputBufferGetSize(output_buf)); + + } else { + + if(output_buf->conv == NULL || xmlOutputBufferGetSize(output_buf) == 0) { + xmlOutputBufferClose(output_buf); + xmlFreeDoc(msr->crypto_html_tree); + msr->of_stream_changed = 0; + return -1; + } + + if(msr->stream_output_data != NULL) { + free(msr->stream_output_data); + msr->stream_output_data = NULL; + } + + msr->stream_output_length = xmlOutputBufferGetSize(output_buf); + msr->stream_output_data = (char *)malloc(msr->stream_output_length+1); + + if (msr->stream_output_data == NULL) { + xmlOutputBufferClose(output_buf); + xmlFreeDoc(msr->crypto_html_tree); + return -1; + } + + memset(msr->stream_output_data, 0x0, msr->stream_output_length+1); + memcpy(msr->stream_output_data, xmlOutputBufferGetContent(output_buf), msr->stream_output_length); + + if (msr->txcfg->debuglog_level >= 4) + msr_log(msr, 4, "inject_encrypted_response_body: Copying XML tree from CONV to stream buffer [%d] bytes.", xmlOutputBufferGetSize(output_buf)); + + } + +#else + if (output_buf->conv == NULL || (output_buf->conv && output_buf->conv->use == 0)) { if(output_buf->buffer == NULL || output_buf->buffer->use == 0) { @@ -1139,6 +1203,8 @@ } +#endif + xmlOutputBufferClose(output_buf); content_value = (char*)apr_psprintf(msr->mp, "%"APR_SIZE_T_FMT, msr->stream_output_length);