From cf90bc3cb6a190cb9cf2fbed424e41a4a6fc2d62 Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Thu, 18 May 2006 12:55:58 +0200 Subject: [PATCH] Added memory limit to bgets_bb(). --- lib/fastbuf.h | 2 +- lib/ff-string.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/fastbuf.h b/lib/fastbuf.h index d822ef6e..6dbacce5 100644 --- a/lib/fastbuf.h +++ b/lib/fastbuf.h @@ -322,7 +322,7 @@ int bgets_nodie(struct fastbuf *f, byte *b, uns l); byte *bgets0(struct fastbuf *f, byte *b, uns l); struct mempool; -uns bgets_bb(struct fastbuf *f, bb_t *b); +uns bgets_bb(struct fastbuf *f, bb_t *b, uns limit); byte *bgets_mp(struct fastbuf *f, struct mempool *mp); struct bgets_stk_struct { diff --git a/lib/ff-string.c b/lib/ff-string.c index 0f4c0b11..cb41b8c7 100644 --- a/lib/ff-string.c +++ b/lib/ff-string.c @@ -79,15 +79,16 @@ exit: } uns -bgets_bb(struct fastbuf *f, bb_t *bb) +bgets_bb(struct fastbuf *f, bb_t *bb, uns limit) { + ASSERT(limit); byte *src; uns src_len = bdirect_read_prepare(f, &src); if (!src_len) return 0; bb_grow(bb, 1); byte *buf = bb->ptr; - uns len = 0, buf_len = bb->len; + uns len = 0, buf_len = MIN(bb->len, limit); do { uns cnt = MIN(src_len, buf_len); @@ -111,9 +112,11 @@ bgets_bb(struct fastbuf *f, bb_t *bb) src_len -= cnt; if (cnt == buf_len) { + if (unlikely(len == limit)) + die("%s: Line too long", f->name); bb_do_grow(bb, len + 1); buf = bb->ptr + len; - buf_len = bb->len - len; + buf_len = MIN(bb->len, limit) - len; } else buf_len -= cnt; -- 2.39.2