GNU bug report logs -
#17466
unexpected bytevector contents with get-bytevector-n
Previous Next
Reported by: J Kalbhenn <jkal <at> posteo.eu>
Date: Sun, 11 May 2014 16:51:01 UTC
Severity: normal
Merged with 17591
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#17466: unexpected bytevector contents with get-bytevector-n
which was filed against the guile package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 17466 <at> debbugs.gnu.org.
--
17466: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17466
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
This is fixed by commit 1baa215, which will be in Guile 2.0.12.
It turns out that when shrinking a bytevector, as happens before
‘get-bytevector-n’ returns, the pointer to the bytevector’s contents
would not be left pointing to the old bytevector. When that old
bytevector was eventually reclaimed, anything could happen.
Thanks!
Ludo’.
[Message part 3 (message/rfc822, inline)]
concerning the following code example
--
(import (rnrs io ports) (ice-9 pretty-print))
(define (problem-part port) (pretty-print (get-bytevector-n port 4096)))
(let loop ((count 100))
(if (> count 0)
(begin (call-with-input-string "22222222222222222222" problem-part)
(loop (- count 1)))))
__
when i run it i get output with portions like this
--
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 16 224 240 0 0 0 0 0 50 50 50 50)
#vu8(50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50)
--
and i would expect the bytevector to always be the same.
this first occurred to me in a more complicated scenario where:
- the input port is a file-port
- pretty-print was used at first and then display instead, but the
problem persisted with a much lower frequency
system info
guile 2.0.11
linux 3.14.2-1-ARCH x86_64
This bug report was last modified 11 years and 47 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.