[gambit-list] print vs. display segfault

Lang Martin lang-gb at coptix.com
Wed Apr 25 17:23:27 EDT 2007


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?



More information about the Gambit-list mailing list