From 49bb5bd30714af627ae78b0897ab05ba566e7c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 27 Nov 2009 17:00:51 +0100 Subject: [PATCH] Disable encoding scanning on non-seekable file ports. * libguile/read.c (scm_i_scan_for_encoding): Don't attempt to scan non-seekable file ports. --- libguile/read.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libguile/read.c b/libguile/read.c index 4772c3218..5219334b4 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -42,6 +42,7 @@ #include "libguile/hashtab.h" #include "libguile/hash.h" #include "libguile/ports.h" +#include "libguile/fports.h" #include "libguile/root.h" #include "libguile/strings.h" #include "libguile/strports.h" @@ -1476,7 +1477,13 @@ scm_i_scan_for_encoding (SCM port) int i; int in_comment; - bytes_read = scm_c_read (port, header, SCM_ENCODING_SEARCH_SIZE); + if (SCM_FPORTP (port) && !SCM_FDES_RANDOM_P (SCM_FPORT_FDES (port))) + /* PORT is a non-seekable file port (e.g., as created by Bash when using + "guile <(echo '(display "hello")')") so bail out. */ + return NULL; + + bytes_read = scm_c_read (port, header, SCM_ENCODING_SEARCH_SIZE); + scm_seek (port, scm_from_int (0), scm_from_int (SEEK_SET)); if (bytes_read > 3