[fpc-pascal] FPC 2.6.2 throws SEGV in fpc_AnsiStr_Decr_Ref(). How is this possible?

Jonas Maebe jonas.maebe at elis.ugent.be
Wed May 8 15:49:59 CEST 2013


On 08 May 2013, at 08:13, Bruce Tulloch wrote:

> After a random but very long period of time (i.e. very many successful
> calls) I get a SEGV in the built-in function fpc_AnsiStr_Decr_Ref.
>
> GDB reports the argument to fpc_AnsiStr_Decr_Ref (the string who's
> reference is to be decremented) is nil (i.e. 0x0).
>
> Prima facie, that's the reason for the SEGV, but how is it possible  
> that
> the compiler would pass a nil pointer to this function the first  
> place?

The first thing fpc_AnsiStr_Decr_Ref does is check whether its  
parameter is nil, and if so it immediately exists. It can be nil in  
case the ansistring contains an empty string.

That routine itself also sets its argument to nil in case this was not  
the case initially (it's a var-parameter), and I assume your crash  
happens after this has been done.

> To put this into context, I'm running FPC 2.6.2 on a 32 bit Linux  
> system
> executing in a multi-threaded application (which uses python threads  
> and
> fpc threads). I have not found obvious evidence of memory corruption  
> from
> other execution contexts or shared memory handling problems.

It's nevertheless most likely memory corruption. You can try compiling  
with -gv and running your program under valgrind to see whether it  
finds anything (you will probably get some false positives about  
certain RTL pchar routines such as strscan and strlen, but you can  
ignore those).


Jonas



More information about the fpc-pascal mailing list