Disable encoding scanning on non-seekable file ports.
authorLudovic Courtès <ludo@gnu.org>
Fri, 27 Nov 2009 16:00:51 +0000 (17:00 +0100)
committerLudovic Courtès <ludo@gnu.org>
Fri, 27 Nov 2009 16:00:51 +0000 (17:00 +0100)
* libguile/read.c (scm_i_scan_for_encoding): Don't attempt to scan
  non-seekable file ports.

libguile/read.c

index 4772c32..5219334 100644 (file)
@@ -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