summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/read.c9
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