From c6775cc0605dfed29e347f1932adcc11b5e220db Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Mon, 4 Feb 2013 23:45:08 -0700 Subject: [PATCH] Fix to inflate: treat EOF as a character, as in the C code. closes PR 13489. In the C code, inflate is allowed to peek at least one character beyond the extent of a deflated byte sequence. The thread related to the bug report of PR 13489 documents that deflate can peek beyond EOF. --- collects/file/gunzip.rkt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/collects/file/gunzip.rkt b/collects/file/gunzip.rkt index 396afe9fa3..19cf9cef65 100644 --- a/collects/file/gunzip.rkt +++ b/collects/file/gunzip.rkt @@ -278,7 +278,8 @@ (set! buf-pos MAX-LOOKAHEAD)) (let ([got (peek-bytes-avail! buffer buf-pos #f input-port buf-pos BUFFER-SIZE)]) (if (eof-object? got) - (error 'inflate "unexpected end of file") + (begin (bytes-set! buffer buf-pos 255) + (set! buf-max (add1 buf-pos))) (set! buf-max (+ buf-pos got)))) (READBITS n)) (let ([v (bytes-ref buffer buf-pos)])