Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal a file opened elsewhere

From: Dmitry Gutov <[email-masked]>
Date: Sun, 24 Feb 2013 19:28:32 +0400

On 23.02.2013 22:44, Eli Zaretskii wrote:
>>> I can fix this particular problem with this simple patch:
>> [...]
>>> However, I'm not sure this is the right or the best way.  If it is, it
>>> will probably be prudent to add some protection against infinite
>>> recursion here.
>>
>> How 'bout moving the
>>
>>     if (BUFFERP (object))
>>       modify_region (object, start, end);
>>
>> earlier in the function.  Something like the patch below.
>
> This will (falsely, AFAIU) tell us that the region is about to be
> modified when we return at the point marked below:

I tried the patches, and both seem to work fine so far. If you could 
explain the practical implications of the drawback in Stefan's patch 
you're describing here, I'll try to test for that, too.

>    /* If we're not starting on an interval boundary, we have to
>      split this interval.  */
>    if (i->position != s)
>      {
>        /* If this interval already has the properties, we can
>           skip it.  */
>        if (interval_has_all_properties (properties, i))
> 	{
> 	  ptrdiff_t got = (LENGTH (i) - (s - i->position));
> 	  if (got >= len)
> 	    RETURN_UNGCPRO (Qnil); <<<<<<<<<<<<<<<<<<<<<<<<<<<
> 	  len -= got;
> 	  i = next_interval (i);
> 	}
>        else
>