64 lines
1.9 KiB
Diff
64 lines
1.9 KiB
Diff
From dea91c97debeac7c1aaf9c19f79029809e23a353 Mon Sep 17 00:00:00 2001
|
|
From: Nick Wellnhofer <wellnhofer@aevum.de>
|
|
Date: Tue, 27 Jul 2021 16:12:54 +0200
|
|
Subject: [PATCH] Fix buffering in xmlOutputBufferWrite
|
|
|
|
Fix a regression introduced with commit a697ed1e which caused
|
|
xmlOutputBufferWrite to flush internal buffers too late.
|
|
|
|
Fixes #296.
|
|
---
|
|
xmlIO.c | 20 ++++++++++++++++----
|
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/xmlIO.c b/xmlIO.c
|
|
index 57312b9..f20c0fa 100644
|
|
--- a/xmlIO.c
|
|
+++ b/xmlIO.c
|
|
@@ -3401,12 +3401,18 @@ xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) {
|
|
out->error = XML_IO_ENCODER;
|
|
return(-1);
|
|
}
|
|
- nbchars = ret >= 0 ? ret : 0;
|
|
+ if (out->writecallback)
|
|
+ nbchars = xmlBufUse(out->conv);
|
|
+ else
|
|
+ nbchars = ret >= 0 ? ret : 0;
|
|
} else {
|
|
ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk);
|
|
if (ret != 0)
|
|
return(-1);
|
|
- nbchars = chunk;
|
|
+ if (out->writecallback)
|
|
+ nbchars = xmlBufUse(out->buffer);
|
|
+ else
|
|
+ nbchars = chunk;
|
|
}
|
|
buf += chunk;
|
|
len -= chunk;
|
|
@@ -3593,13 +3599,19 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
|
|
out->error = XML_IO_ENCODER;
|
|
return(-1);
|
|
}
|
|
- nbchars = ret >= 0 ? ret : 0;
|
|
+ if (out->writecallback)
|
|
+ nbchars = xmlBufUse(out->conv);
|
|
+ else
|
|
+ nbchars = ret >= 0 ? ret : 0;
|
|
} else {
|
|
ret = escaping(xmlBufEnd(out->buffer), &chunk, str, &cons);
|
|
if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */
|
|
return(-1);
|
|
xmlBufAddLen(out->buffer, chunk);
|
|
- nbchars = chunk;
|
|
+ if (out->writecallback)
|
|
+ nbchars = xmlBufUse(out->buffer);
|
|
+ else
|
|
+ nbchars = chunk;
|
|
}
|
|
str += cons;
|
|
len -= cons;
|
|
--
|
|
1.8.3.1
|
|
|