summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-02-07 23:05:23 +0100
committerLudovic Courtès <ludo@gnu.org>2015-02-07 23:16:55 +0100
commit46b8aadbd6f4673aad27f6425f48a3b3ac5c88dc (patch)
treeac64736caa7b360207c2286a31d46835173bd718 /tests
parentcbc538fe69577068d5676428c77287d82123a704 (diff)
downloadguix-46b8aadbd6f4673aad27f6425f48a3b3ac5c88dc.tar.gz
serialization: Check for EOF and incomplete input conditions.
Fixes <http://bugs.gnu.org/19756>.
Reported by <sleep_walker@suse.cz>.

* guix/serialization.scm (currently-restored-file): New variable.
  (get-bytevector-n*): New procedure.
  (read-int, read-long-long, read-string, read-latin1-string,
  read-contents): Use it instead of 'get-bytevector-n'.
  (restore-file): Parameterize 'currently-restored-file' and set it.
* tests/nar.scm ("restore-file with incomplete input"): New test.
Diffstat (limited to 'tests')
-rw-r--r--tests/nar.scm11
1 files changed, 10 insertions, 1 deletions
diff --git a/tests/nar.scm b/tests/nar.scm
index 38b2482c92..4ccd364861 100644
--- a/tests/nar.scm
+++ b/tests/nar.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -201,6 +201,15 @@
       (lambda ()
         (rm-rf input)))))
 
+(test-equal "restore-file with incomplete input"
+  (string-append %test-dir "/foo")
+  (let ((port (open-bytevector-input-port #vu8(1 2 3))))
+    (guard (c ((nar-error? c)
+               (and (eq? port (nar-error-port c))
+                    (nar-error-file c))))
+      (restore-file port (string-append %test-dir "/foo"))
+      #f)))
+
 (test-assert "write-file + restore-file"
   (let* ((input  (string-append (dirname (search-path %load-path "guix.scm"))
                                 "/guix"))