Fixed buffer overrun in resync restart for variable width external formats.
authorTeemu Kalvas <chery@s2.org>
Wed, 8 Feb 2006 19:41:10 +0000 (19:41 +0000)
committerTeemu Kalvas <chery@s2.org>
Wed, 8 Feb 2006 19:41:10 +0000 (19:41 +0000)
src/code/fd-stream.lisp

index 1afdecf..a84133e 100644 (file)
         (let ((byte (sap-ref-8 sap head)))
           ,in-expr))
       (defun ,resync-function (stream)
-        (loop (input-at-least stream 1)
+        (loop (input-at-least stream 2)
               (incf (fd-stream-ibuf-head stream))
               (unless (block decode-break-reason
                         (let* ((sap (fd-stream-ibuf-sap stream))
                                (head (fd-stream-ibuf-head stream))
                                (byte (sap-ref-8 sap head))
                                (size ,in-size-expr))
-                          ,in-expr)
+                         (input-at-least stream size)
+                         (let ((sap (fd-stream-ibuf-sap stream))
+                               (head (fd-stream-ibuf-head stream)))
+                           ,in-expr))
                         nil)
                 (return))))
       (setf *external-formats*