summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAvneesh Sachdev <avneesh@opensourcerouting.org>2012-05-05 17:42:43 -0700
committerDavid Lamparter <equinox@opensourcerouting.org>2012-10-25 10:15:58 -0700
commit4effc29fb1c33a87a8d386de39c20d36a6956645 (patch)
tree73e57392e4227aeae3ca3ef1db54e227f46909e6 /lib
parentb4154c145a2d1d0679983130413b81d44fbb04ab (diff)
lib: improve sanity checks in stream_set_endp()
* lib/stream.c: (stream_set_endp) Add checks to make sure that the supplied 'endp' is within the 'size' of the stream, and that the current read pointer 'getp' is not beyond the specified 'endp'.
Diffstat (limited to 'lib')
-rw-r--r--lib/stream.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/stream.c b/lib/stream.c
index b226a25e..ee2920e6 100644
--- a/lib/stream.c
+++ b/lib/stream.c
@@ -219,13 +219,23 @@ stream_set_endp (struct stream *s, size_t pos)
{
STREAM_VERIFY_SANE(s);
- if (!GETP_VALID (s, pos))
+ if (!ENDP_VALID(s, pos))
{
STREAM_BOUND_WARN (s, "set endp");
- pos = s->endp;
+ return;
+ }
+
+ /*
+ * Make sure the current read pointer is not beyond the new endp.
+ */
+ if (s->getp > pos)
+ {
+ STREAM_BOUND_WARN(s, "set endp");
+ return;
}
s->endp = pos;
+ STREAM_VERIFY_SANE(s);
}
/* Forward pointer. */