-
-
Notifications
You must be signed in to change notification settings - Fork 651
Closed
Labels
Description
Expected behavior
Any string can be printed to the REPL without errors.
Actual behavior
Printing certain strings cause StringIndexOutOfBoundsException
Steps to reproduce the problem
I started seeing these exception after updating to nREPL 1.5.0 with timbre, but I figured that timbre is not the root cause. I've captured the problematic output to a file using:
(let [string-writer (java.io.StringWriter.)]
(binding [*err* string-writer]
(log/error e message))
(spit "problem.txt" (.toString string-writer)))To reproduce the issue:
- Download the attached file:
- Eval in the REPL:
(println (slurp "problem.txt"))Error:
Execution error (StringIndexOutOfBoundsException) at jdk.internal.util.Preconditions$1/apply (Preconditions.java:55).
Range [0, 1024) out of bounds for length 1020
Exception in thread "nREPL-session-09e36291-98d2-4c2c-99e6-ae3119e6636f" java.lang.StringIndexOutOfBoundsException: Range [0, 1024) out of bounds for length 1020
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4937)
at java.base/java.lang.String.substring(String.java:2899)
at nrepl.out.CallbackBufferedOutputStream.maybeFlush(CallbackBufferedOutputStream.java:75)
at nrepl.out.CallbackBufferedOutputStream.flush(CallbackBufferedOutputStream.java:52)
at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:321)
at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:150)
at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:249)
at java.base/java.io.PrintWriter.flush(PrintWriter.java:380)
at clojure.core$flush.invokeStatic(core.clj:3737)
at clojure.core$flush.invoke(core.clj:3731)
at nrepl.middleware.interruptible_eval$evaluator$run__7460.invoke(interruptible_eval.clj:157)
Environment & Version information
CIDER version information
;; CIDER 1.20.0-snapshot (package: 20251016.1722), nREPL 1.5.0
;; Clojure 1.12.3, Java 25
Lein / Clojure CLI version
Clojure CLI 1.12.3
Emacs version
31 (master)
Operating system
MacOS
JDK distribution
openjdk version "25" 2025-09-16 LTS
OpenJDK Runtime Environment Temurin-25+36 (build 25+36-LTS)
OpenJDK 64-Bit Server VM Temurin-25+36 (build 25+36-LTS, mixed mode, sharing)