From: Richard M K. <kr...@us...> - 2007-12-16 00:24:09
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv11580/src/code Modified Files: run-program.lisp Log Message: 1.0.12.34: fix bug, add error signalling in RUN-PROGRAM * Incorrect initialization of one bookkeeping variable in COPY-DESCRIPTOR-TO-STREAM left another bookkeeping variable with garbage after a properly-encoded short read, causing subsequent decoding attempts to fail. Only easily visible on when the child line buffers to one or another descriptor. * Add test for same. * Additionally, signal an error if we have any not-yet-decoded octets when the child closes its output or error. * Add test for same. Index: run-program.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/run-program.lisp,v retrieving revision 1.67 retrieving revision 1.68 diff -u -d -r1.67 -r1.68 --- run-program.lisp 13 Dec 2007 20:55:49 -0000 1.67 +++ run-program.lisp 16 Dec 2007 00:23:59 -0000 1.68 @@ -879,6 +879,10 @@ (setf handler nil) (decf (car cookie)) (sb-unix:unix-close descriptor) + (unless (zerop read-end) + ;; Should this be an END-OF-FILE? + (error "~@<non-empty buffer when EOF reached ~ + while reading from child: ~S~:>" buf)) (return)) ((null count) (sb-sys:remove-fd-handler handler) @@ -890,7 +894,7 @@ (strerror errno))) (t (incf read-end count) - (let* ((decode-end (length buf)) + (let* ((decode-end read-end) (string (handler-case (octets-to-string buf :end read-end |