diff options
-rw-r--r-- | libguile/read.c | 9 |
1 files changed, 8 insertions, 1 deletions
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 |