bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#18410: Use SAFE_ALLOCA etc. to avoid unbounded stack allocation.


From: Dmitry Antipov
Subject: bug#18410: Use SAFE_ALLOCA etc. to avoid unbounded stack allocation.
Date: Fri, 05 Sep 2014 12:45:27 +0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0

On 09/05/2014 10:08 AM, Paul Eggert wrote:

Attached is a patch to fix the unbounded alloca calls that I found when 
auditing the Emacs source.
I'm sending this to bug-gnu-emacs to give Eli a heads-up, as some of the fixes 
affect Windows code.
This patch is relative to Emacs trunk bzr 117822.

Code like:

USE_SAFE_ALLOCA;                                                    |-
ptrdiff_t count = SPECPDL_INDEX ();                    |-           |
...                                                    | inner bind | outer bind
Lisp_Object result = unbind_to (count, Fsome_func ()); |-           |
SAFE_FREE ();                                                       |-
return result;

looks suboptimal because it calls unbind_to twice.  May be we need 
SAFE_FREE_RETURN,
somewhat similar to RETURN_UNGCPRO?  I.e. we should be able to say:

USE_SAFE_ALLOCA;
ptrdiff_t count = SPECPDL_INDEX ();
...
SAFE_FREE_RETURN (Fsome_func ());

Minor note: why specbind can't return previous binding level?
To avoid extra typing, someone can write:

ptrdiff_t count = specbind (Qsome_var, Qnil);

instead of:

ptrdiff_t count = SPECPDL_INDEX ();
specbind (Qsome_var, Qnil);

Dmitry






reply via email to

[Prev in Thread] Current Thread [Next in Thread]