From b0ba8231d75c0624d42ba408ff896de41b94281f Mon Sep 17 00:00:00 2001 From: Kimbsen Date: Thu, 15 Apr 2021 13:15:41 +0200 Subject: [PATCH] fix panic when setting rate to lower than tokens consumed last interval fixes this by not attempting read/write on invalid slice ranges --- iocap.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/iocap.go b/iocap.go index 909a688..e28f165 100644 --- a/iocap.go +++ b/iocap.go @@ -39,6 +39,9 @@ func (r *Reader) Read(p []byte) (n int, err error) { for n < len(p) { // Ask for enough space to fit all remaining bytes v := r.bucket.insert(len(p) - n) + if v < 0 { + return + } // Read from src into the byte range in p v, err = r.src.Read(p[n : n+v]) @@ -81,6 +84,9 @@ func (w *Writer) Write(p []byte) (n int, err error) { for n < len(p) { // Ask for enough space to write p completely. v := w.bucket.insert(len(p) - n) + if v < 0 { + return + } // Write from the byte offset on p into the writer. v, err = w.dst.Write(p[n : n+v])