Opened 11 years ago
Closed 11 years ago
#105 closed defect (fixed)
error-handling bug
| Reported by: | Raymond Toy | Owned by: | somebody |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | Core | Version: | 2014-06 |
| Keywords: | Cc: |
Description
From an email on cmucl-help from Matt Kaufmann on 2014/07/26.
It appears to be the same bug as this SBCL bug (now fixed for SBCL):
https://bugs.launchpad.net/sbcl/+bug/1333327
Here is a log illustrating the bug in the CMUCL versions mentioned above. The expected behavior is shown later below (using SBCL 1.2.1).
.......... CMUCL 20e and also 2014-06 snapshot: ..........
* (defun read-string-fn (str)
(handler-case
(let ((acc nil))
(with-input-from-string
(stream str)
(loop do
(let* ((eof-marker (cons nil nil))
(elem (read stream nil eof-marker)))
(if (eq elem eof-marker)
(loop-finish)
(push elem acc)))))
(setq acc (nreverse acc))
(values :OK acc))
(error (condition)
(return-from read-string-fn
(values :ERROR (format nil "~A" condition))))
(storage-condition (condition)
(return-from read-string-fn
(values :STORAGE (format nil "~A" condition))))))
READ-STRING-FN
* (read-string-fn "#\wtf")
Error in function LISP::CLOSED-FLAME: #<String-Input Stream> is closed.
[Condition of type SIMPLE-ERROR]
Restarts:
0: [ABORT] Return to Top-Level.
Debug (type H for help)
(LISP::CLOSED-FLAME #<String-Input Stream>)
Source: Error finding source:
Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists:
target:code/stream.lisp.
0]
..........
Here is the analogous log after defining the function above in SBCL 1.2.1, which I believe is as expected.
.......... SBCL 1.2.1 ..........
* (read-string-fn "#\wtf")
:ERROR
"no dispatch function defined for #\\W
Stream: #<SB-IMPL::STRING-INPUT-STREAM {1002E27C03}>"
*
Change History (2)
comment:1 Changed 11 years ago by
comment:2 Changed 11 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
commit c0052f5544d27980c74d5a17cd55dc2069085602 Author: Raymond Toy <toy.raymond@…> Date: Sat Aug 9 12:53:57 2014 -0700
Fix ticket:105 by not flaming out on a closed stream.
- code/reader.lisp:
- The READER-ERROR condition tries to be helpful and print out the position of where the error occurred using FILE-POSITION. But FILE-POSITION flames out when the stream is closed, so check for a closed stream before calling FILE-POSITION
- tests/trac.lisp:
- Add test from the bug report.
- general-info/release-20f.txt:
- Update.

Link to the actual message: http://article.gmane.org/gmane.lisp.cmucl.general/6515