1.0.29.36: another regression from 1.0.29.27
authorNikodemus Siivola <nikodemus@random-state.net>
Wed, 24 Jun 2009 15:14:44 +0000 (15:14 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Wed, 24 Jun 2009 15:14:44 +0000 (15:14 +0000)
* Need to be able to load zero-length .lisp files -- but still
  disallow loading of empty fasls.

* Reported by Martin Cracauer.

src/code/target-load.lisp
tests/load.impure.lisp
version.lisp-expr

index d022e55..184a1ef 100644 (file)
         (let* ((real (probe-file stream))
                (should-be-fasl-p
                 (and real (string= (pathname-type real) *fasl-file-type*))))
-          (when (fasl-header-p stream :errorp should-be-fasl-p)
+          ;; Don't allow empty .fasls, and assume other empty files
+          ;; are source files.
+          (when (and (or should-be-fasl-p (not (eql 0 (file-length stream))))
+                     (fasl-header-p stream :errorp should-be-fasl-p))
             (return-from load (load-stream stream t)))))
       ;; Case 3: Open using the gived external format, process as source.
       (with-open-file (stream pathname :external-format external-format)
index 7466edb..a739006 100644 (file)
     (stimulate-sbcl)
     (stimulate-sbcl)))
 
-
+(defun load-empty-file (type)
+  (let ((pathname (make-pathname :name "load-impure-lisp-empty-temp"
+                                 :type type)))
+      (unwind-protect
+           (progn
+             (with-open-file (f pathname
+                                :if-exists :supersede
+                                :direction :output))
+             (handler-case
+                 (progn (load pathname) t)
+               (error () nil)))
+        (ignore-errors (delete-file pathname)))))
+
+(with-test (:name (load "empty.lisp"))
+  (assert (load-empty-file "lisp")))
+
+(with-test (:name (load "empty.fasl"))
+  (assert (not (load-empty-file "fasl"))))
index fedfda1..f580e61 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.29.35"
+"1.0.29.36"