andrewcoppin at btinternet.com
Thu Oct 23 15:42:04 EDT 2008
Thomas DuBuisson wrote:
> The point is... I'm not doing that. Gtk2hs is, but that's a
> well-tested library, so I very much doubt it's the source of
> the bug.
> so how would a bug in GTK or in libpng demonstrate itself ? i'm
> wondering, wouldn't it be a segfault ?
> does just wrapping them in some fancy haskell typed functions turn
> every library into a safe, typed haskell code ?
> Sure it would, but the type system helps prevent programmers from
> misusing the (hopefully correctly implemented) functions and thus
> triggering an error due to bad input (ex: a pointer freed memory).
> And as Andrew said, GTK and its bindings are well tested so he is
> doubting that as the cause. I wouldn't rule it out so fast, but GHC
> has compiled pure code and crashed for me before, so its shouldn't be
> surprising either way.
This is the first time I've ever seen a Haskell program crash. (Unless
you purposely do something Very Bad to it - e.g., it crashes pretty good
if you try to run it without the GTK+ DLLs available, or run it on an
ancient version of Windows or something.)
> As for fixing this problem, is there a bit more detailed error you
> could provide, Andrew?
The problem arives inside a large, complicated program. The program
draws some stuff into an IOUArray, runs a convolution over it, and then
uses the GDK to write into a Pixbuf, which it then saves to a PNG file.
The IOUArray stuff is done using unsafeWrite, but that's the only
"unsafe" function used in the program. Usually the program works
flawlessly. However, if you ask it to draw to a certain combination of
coordinates, the program crashes. It's output indicates that it's drawn
to the IOUArray, it's run the convolution, and it's trying to save the
PNG file... but then a message pops up saying "the generated code caused
an access violation" and the program stops. (And sure enough, an
incomplete PNG file exists in the filesystem - so it really has crashed
part-way through writing it.)
Theoretically, feeding invalid coordinates to the program might make it
run off the end of the IOUArray (or maybe off the beginning of it), but
I don't see what that has to do with GTK+...
More information about the Haskell-Cafe