daemon: Gracefully handle cases where the daemon does not return a status code.

* guix/store.scm (process-stderr): Check for EOF before doing (read-int p).
This commit is contained in:
Ludovic Courtès 2013-04-20 10:53:31 +02:00
parent 6858f9d132
commit 0ff3e3aa9b
1 changed files with 4 additions and 1 deletions

View File

@ -336,7 +336,10 @@ encoding conversion errors."
#f)) #f))
((= k %stderr-error) ((= k %stderr-error)
(let ((error (read-latin1-string p)) (let ((error (read-latin1-string p))
(status (if (>= (nix-server-minor-version server) 8) ;; Currently the daemon fails to send a status code for early
;; errors like DB schema version mismatches, so check for EOF.
(status (if (and (>= (nix-server-minor-version server) 8)
(not (eof-object? (lookahead-u8 p))))
(read-int p) (read-int p)
1))) 1)))
(raise (condition (&nix-protocol-error (raise (condition (&nix-protocol-error