summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-04-07 01:56:17 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-04-07 01:56:17 +0000
commit2ef742b2bbe323e50001bece2116734ec2b01ee0 (patch)
tree79e8f11b3e52ca78d5683409d3c2c13790a5925e /src
parente875c97c75e5949af05eb2b919936afb468d7063 (diff)
downloadlibhubbub-2ef742b2bbe323e50001bece2116734ec2b01ee0.tar.gz
libhubbub-2ef742b2bbe323e50001bece2116734ec2b01ee0.tar.bz2
Fix recalculation of used document buffer length after resizing when the last attempt to write into the buffer failed mid-way through a multibyte sequence.
Add regression test for this Include regression tests in the testsuite index. svn path=/trunk/hubbub/; revision=4075
Diffstat (limited to 'src')
-rw-r--r--src/input/utf16_stream.c17
-rw-r--r--src/input/utf8_stream.c17
2 files changed, 12 insertions, 22 deletions
diff --git a/src/input/utf16_stream.c b/src/input/utf16_stream.c
index 1d19a7e..e69f124 100644
--- a/src/input/utf16_stream.c
+++ b/src/input/utf16_stream.c
@@ -195,20 +195,18 @@ hubbub_error hubbub_utf16stream_append(hubbub_inputstream *stream,
moved = (temp != stream->buffer);
stream->buffer = temp;
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->buffer_alloc += BUFFER_CHUNK;
base = stream->buffer + stream->buffer_len;
- space = stream->buffer_alloc - stream->buffer_len;
+ space += BUFFER_CHUNK;
if (moved)
hubbub_inputstream_buffer_moved(stream);
}
/* And fix up buffer length */
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->had_eof = true;
} else {
@@ -246,21 +244,18 @@ hubbub_error hubbub_utf16stream_append(hubbub_inputstream *stream,
moved = (temp != stream->buffer);
stream->buffer = temp;
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->buffer_alloc += BUFFER_CHUNK;
base = stream->buffer + stream->buffer_len;
- space = stream->buffer_alloc - stream->buffer_len -
- space;
+ space += BUFFER_CHUNK;
if (moved)
hubbub_inputstream_buffer_moved(stream);
}
/* And fix up buffer length */
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
}
return HUBBUB_OK;
diff --git a/src/input/utf8_stream.c b/src/input/utf8_stream.c
index 5d08993..3de142b 100644
--- a/src/input/utf8_stream.c
+++ b/src/input/utf8_stream.c
@@ -195,20 +195,18 @@ hubbub_error hubbub_utf8stream_append(hubbub_inputstream *stream,
moved = (temp != stream->buffer);
stream->buffer = temp;
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->buffer_alloc += BUFFER_CHUNK;
base = stream->buffer + stream->buffer_len;
- space = stream->buffer_alloc - stream->buffer_len;
+ space += BUFFER_CHUNK;
if (moved)
hubbub_inputstream_buffer_moved(stream);
}
/* And fix up buffer length */
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->had_eof = true;
} else {
@@ -246,21 +244,18 @@ hubbub_error hubbub_utf8stream_append(hubbub_inputstream *stream,
moved = (temp != stream->buffer);
stream->buffer = temp;
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
stream->buffer_alloc += BUFFER_CHUNK;
base = stream->buffer + stream->buffer_len;
- space = stream->buffer_alloc - stream->buffer_len -
- space;
+ space += BUFFER_CHUNK;
if (moved)
hubbub_inputstream_buffer_moved(stream);
}
/* And fix up buffer length */
- stream->buffer_len += stream->buffer_alloc -
- stream->buffer_len - space;
+ stream->buffer_len = stream->buffer_alloc - space;
}
return HUBBUB_OK;