diff --git a/src/jzon.lisp b/src/jzon.lisp index 718e8bf..1e69c71 100644 --- a/src/jzon.lisp +++ b/src/jzon.lisp @@ -412,7 +412,9 @@ see `json-atom'" (let ((i start)) (declare (type (integer 0 #.array-dimension-limit) i)) (let* ((step (lambda () (when (< i end) (char in (shiftf i (1+ i)))))) - (pos (lambda () (%calc-pos step (- (shiftf i start) start)))) + (pos (if (= 0 (length in)) + (lambda () (values 1 0)) + (lambda () (%calc-pos step (- (shiftf i start) start))))) (read-string (let ((string-accum (make-array (min 256 (1- array-dimension-limit)) :element-type 'character :adjustable t :fill-pointer 0))) (lambda () ;; Scan until we hit a closing " diff --git a/test/jzon-tests.lisp b/test/jzon-tests.lisp index e720602..7a87ece 100644 --- a/test/jzon-tests.lisp +++ b/test/jzon-tests.lisp @@ -275,6 +275,7 @@ (is (equalp (ph "x" 1 "y" 2) (parse "{\"x\": 1, \"y\": 2}")))) (test parses-objects-eof + (signals (json-eof-error) (parse "")) (signals (json-eof-error) (parse "{")) (signals (json-eof-error) (parse "{\"x\": 1, \"y\": 2")))