ok, I got a segfault in a program and I don't quite understand the cause.
This code:
(define (string-escape string chars #!optional (escape (lambda (c) (print #\ c))) port) (let ((pred? (%string-charset->pred chars)) (output (or port (open-output-string "")))) (with-output-port output (string-for-each (lambda (c) (if (pred? c) (escape c) (print c))) ; this is where the anti-magic happens string)) (or port (get-output-string output))))
is called many times (inside a function called sql-quote-object). On line 1420 of my input file, it segfaults. I've had a hard time reproducing this in a more confined context, but I will if this doesn't turn out to be known or easily deducible.
If I change that (print c) to (display c), all is well. At first I was under the impression that the output was leaking because line 1421 turned out to contain a literal ^H. The progam exhibits the same behavior with all the lines containing control characters removed from the input. Also exhibits the same behavior in a file containing multiple copies of the first 1419 lines of the input, so I'm pretty confident it doesn't have anything to do with the input.
I'm sorry this message is so rough -- I really will create a responsible bug report if this vague one doesn't give someone with a good understanding of the internals something to go on.
Does print buffer it's output, by any chance?