sb-simple-streams: signal an error for bad stream classes in OPEN
authorKambiz Darabi <darabi@m-creations.net>
Fri, 6 Jan 2012 08:11:36 +0000 (09:11 +0100)
committerNikodemus Siivola <nikodemus@random-state.net>
Fri, 13 Apr 2012 08:23:04 +0000 (11:23 +0300)
  Instead of silently returning NIL, signal an error if the class does not
  exist (if argument :class is a symbol) or is not a stream class.

  lp#969352

NEWS
contrib/sb-simple-streams/impl.lisp
contrib/sb-simple-streams/simple-stream-tests.lisp

diff --git a/NEWS b/NEWS
index fbb0734..8c375a1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
 ;;;; -*- coding: utf-8; fill-column: 78 -*-
 changes relative to sbcl-1.0.55:
+  * bug fix: SB-SIMPLE-STREAMS signals an error for bogus :CLASS arguments in
+    OPEN. (lp#969352, thanks to Kambiz Darabi)
   * documentation:
     ** improved docstrings: REPLACE (lp#965592)
 
index 07732f3..3512edf 100644 (file)
            (remf options :input-handle)
            (remf options :output-handle)
            (make-instance class :lisp-stream
-                          (apply #'open-fd-stream filespec options))))))
+                          (apply #'open-fd-stream filespec options)))
+          (t (error "Don't know how to handle the stream class ~A"
+                    (etypecase class
+                      (symbol (find-class class t))
+                      (class class)))))))
 
 
 (declaim (inline read-byte read-char read-char-no-hang unread-char))
index f0d5a73..20c5a8e 100644 (file)
               (progn ,@body))
          ,(when delete-afterwards `(ignore-errors (delete-file ,file))))))
 
+(deftest non-existent-class
+  (handler-case
+      (with-test-file (s *test-file* :class 'non-existent-stream)
+        nil)
+    ;; find-class will raise a simple-error
+    (simple-error (c) (search "There is no class" (simple-condition-format-control c))))
+  0)
+
+(deftest non-stream-class
+  (handler-case
+      (with-test-file (s *test-file* :class 'standard-class)
+        nil)
+    ;; Will fall through sb-simple-streams:open as it is no stream class.
+    (simple-error (c) (search "Don't know how to handle" (simple-condition-format-control c))))
+  0)
+
 (deftest create-file-1
     ;; Create a file-simple-stream, write data.
     (prog1