Hello,

I'm not too familiar with guile's codebase, but I think I've found the
bug. It's a fencepost error in the SEEK_SET case of bip_seek from
libguile/r6rs-ports.c . I've attached a fix for stable-2.0

Regards,
Ian
>From c3fd372c573ae1bc9cdf3cb0ef69d6a0592ec020 Mon Sep 17 00:00:00 2001
From: Ian Price <ianpric...@googlemail.com>
Date: Fri, 8 Apr 2011 02:49:20 +0100
Subject: [PATCH] Fix fencepost error in bip_seek

* libguile/r6rs-ports.c (bip_seek): Fix to allow seeking to end of port.

* test-suite/tests/r6rs-ports.test ("bytevector input port can seek to
  very end"): Add tests.
---
 libguile/r6rs-ports.c            |    2 +-
 test-suite/tests/r6rs-ports.test |    9 +++++++++
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c
index 1f72415..7473db9 100644
--- a/libguile/r6rs-ports.c
+++ b/libguile/r6rs-ports.c
@@ -136,7 +136,7 @@ bip_seek (SCM port, scm_t_off offset, int whence)
       /* Fall through.  */
 
     case SEEK_SET:
-      if (c_port->read_buf + offset < c_port->read_end)
+      if (c_port->read_buf + offset <= c_port->read_end)
 	{
 	  c_port->read_pos = c_port->read_buf + offset;
 	  c_result = offset;
diff --git a/test-suite/tests/r6rs-ports.test b/test-suite/tests/r6rs-ports.test
index 70b5853..01d8235 100644
--- a/test-suite/tests/r6rs-ports.test
+++ b/test-suite/tests/r6rs-ports.test
@@ -320,6 +320,15 @@
                          (u8-list->bytevector
                           (map char->integer (string->list "Port!")))))))
 
+  (pass-if "bytevector input port can seek to very end"
+    (let ((empty (open-bytevector-input-port '#vu8()))
+          (not-empty (open-bytevector-input-port '#vu8(1 2 3))))
+      (and (begin (set-port-position! empty (port-position empty))
+                  (= 0 (port-position empty)))
+           (begin (get-bytevector-n not-empty 3)
+                  (set-port-position! not-empty (port-position not-empty))
+                  (= 3 (port-position not-empty))))))
+
   (pass-if-exception "make-custom-binary-input-port [wrong-num-args]"
     exception:wrong-num-args
 
-- 
1.7.3.4

Reply via email to