summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Buffer.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Buffer.cc b/lib/Buffer.cc
index 68ecb9e..473da62 100644
--- a/lib/Buffer.cc
+++ b/lib/Buffer.cc
@@ -181,9 +181,11 @@ bool Buffer::CanSeek() const {
}
off_t Buffer::seek(off_t off, int wheel) throw (GeneralException) {
+ size_t old_ptr;
if (!seekable) {
throw GeneralException("This buffer is a fifo, thus is not seekable");
}
+ old_ptr = ptr;
switch (wheel) {
case SEEK_SET:
ptr = off;
@@ -195,6 +197,10 @@ off_t Buffer::seek(off_t off, int wheel) throw (GeneralException) {
ptr = realsiz + off;
break;
}
+ if (ptr < 0) {
+ ptr = old_ptr;
+ throw GeneralException("Can't seek a Buffer before its start.")
+ }
operator[](ptr);
return ptr;
}