> I've managed to get a segfault in haskell! And without even using the
> FFI... actually my code uses the FFI, but the changes that
> triggered the
> segfault don't involve that, they just use Text.Regex.
>
> The code that triggers the segfault is the function produced by:
>
> filetype_function :: IO (FilePath -> FileType)
> filetype_function = do
> binsfile <- def_prefval "binariesfile" "_darcs/prefs/binaries"
> bins <- (liftM lines $ readFile binsfile) `catch`
> (\e-> if isDoesNotExistError e then return []
> else ioError e)
> let rs = map (mkRegex.fixregex) bins
> isbin f = or $ map (\r-> matchRegex r f /= Nothing) rs
> ftf f = if isbin f then BinaryFile else TextFile
> in
> return ftf
>
> and the valgrind report on the segfault is:
>
> ==8705== Invalid free() / delete / delete[]
> ==8705== at 0x4015D6A4: free (vg_clientfuncs.c:185)
> ==8705== by 0x40399A34: (within /lib/libc-2.3.1.so)
> ==8705== by 0x40399C13: regfree (in /lib/libc-2.3.1.so)
> ==8705== by 0x8117683: s67U_entry (in /home/droundy/darcs/darcs)
> ==8705== Address 0x1 is not stack'd, malloc'd or free'd
> ==8705==
> ==8705== Invalid read of size 4
> ==8705== at 0x40399A58: (within /lib/libc-2.3.1.so)
> ==8705== by 0x40399C13: regfree (in /lib/libc-2.3.1.so)
> ==8705== by 0x8117683: s67U_entry (in /home/droundy/darcs/darcs)
> ==8705== Address 0x22 is not stack'd, malloc'd or free'd
I've found one possible cause of this: we were calling regfree on the
regular expression structure even if regcomp failed. This will be fixed
in GHC 6.0.1.
Workaround: don't pass any bogus regular expressions to regcomp.
Cheers,
Simon
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe