From 0dff630a11f97749c10a73542fbf5d897e089c33 Mon Sep 17 00:00:00 2001 From: Ian Jackson <ijackson@chiark.greenend.org.uk> Date: Mon, 14 Apr 2014 21:50:11 +0200 Subject: [PATCH] Old oop-read.h bugfixes from Ian Jackson Some years ago I contributed a feature for reading lines and records to liboop: oop-read.h and read.c. Since it took a while for that feature to make it into distributed versions, for a long time I've been using my own copy of the source file. It seems that I fixed a couple of bugs in my copy which are still in the Debian package. I can't find any record of me having told anyone about them and now I find that 1.0-6 still has the bugs. There are two fixes: * Initialise "rd->discard" properly * Avoid rd->neednotcheck becoming negative --- read.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/read.c b/read.c index 6a1cc29..38cba00 100644 --- a/read.c +++ b/read.c @@ -114,6 +114,7 @@ oop_read *oop_rd_new(oop_source *oop, oop_readable *ra, char *buf, size_t bufsz) rd->allocbuf= 0; rd->used= 0; rd->alloc= buf ? bufsz : 0; + rd->discard= 0; rd->neednotcheck= 0; rd->displacedchar= -1; rd->style= *OOP_RD_STYLE_IMMED; @@ -235,7 +236,11 @@ static void *on_process(oop_source *oop, oop_read *rd, int try_read) { if (rd->discard) { rd->used -= rd->discard; - rd->neednotcheck -= rd->discard; + if (rd->neednotcheck > rd->discard) { + rd->neednotcheck -= rd->discard; + } else { + rd->neednotcheck= 0; + } memmove(buf, buf + rd->discard, rd->used); rd->discard= 0; } -- GitLab