Welcome! Please see the About page for a little more info on how this works.

0 votes
in Spec by

In this example a non-conforming value is passed to conform, which should return ::s/invalid but instead throws StackOverflow.

`
(s/conform (s/ (s/alt :n (s/ number?) :s (s/* string?))) [[1 2 3]])

CompilerException java.lang.StackOverflowError, compiling:(/Users/alex/code/clojure.spec/src/spec/examples/tree.clj:44:1)

clojure.lang.Compiler.load (Compiler.java:7415)
user/eval2674 (form-init3668332544888233146.clj:1)
user/eval2674 (form-init3668332544888233146.clj:1)
clojure.lang.Compiler.eval (Compiler.java:6951)
clojure.lang.Compiler.eval (Compiler.java:6914)
clojure.core/eval (core.clj:3187)
clojure.core/eval (core.clj:3183)
clojure.main/repl/read-eval-print--9692/fn--9695 (main.clj:241)
clojure.main/repl/read-eval-print--9692 (main.clj:241)
clojure.main/repl/fn--9701 (main.clj:259)
clojure.main/repl (main.clj:259)
clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn--675 (interruptible_eval.clj:69)

Caused by:
StackOverflowError

clojure.spec/deriv (spec.clj:1296)
clojure.spec/deriv (spec.clj:1311)
clojure.spec/deriv/fn--13794 (spec.clj:1312)
clojure.core/map/fn--6680 (core.clj:2728)
clojure.lang.LazySeq.sval (LazySeq.java:40)
clojure.lang.LazySeq.seq (LazySeq.java:49)
clojure.lang.RT.seq (RT.java:525)
clojure.core/seq--6221 (core.clj:137)
clojure.core/map/fn--6687 (core.clj:2736)
clojure.lang.LazySeq.sval (LazySeq.java:40)
clojure.lang.LazySeq.seq (LazySeq.java:49)
clojure.lang.RT.seq (RT.java:525)

`

2 Answers

0 votes
by

Comment made by: pbrown

While the following isn't super useful, it causes one too:

`
user=> (s/conform (s/+ (s/? any?)) [:a])

StackOverflowError clojure.lang.RT.first (RT.java:683)
`

0 votes
by
Reference: https://clojure.atlassian.net/browse/CLJ-2002 (reported by borkdude)
...