On Mon, 15 Jun 2015, Petr Pisar wrote:

> My proposal was to to measure number of consumed stack. Instead of adding
> 1 to a counter on each call, one would compute difference of stack pointer at
> current call to the first call and compared this delta to the limit. You could
> do it even without in-line assembler simply by referencing an
> automatic-storage variable like a variable local to the current function. Of
> course there would be some off-by-one-call drift but that could be ignored or
> extrapolated based on current stack usage growth ratio.

That approach assumes a contiguous stack. I see that gcc 4.6.0 
implements split stack functionality. I wouldn't want to rely on 
comparing addresses of automatic variables.

> Your remark gave me an idea that the size of the stack could be obtained by
> getrlimit() on the first call, so even the user would not need to specify the
> limit explicitly as the default would be that (minus stack consumed by a PCRE
> application on the first call). That would provide fully automatic heuristic
> preventing from unexpected sefgaults.

PCRE was written in standard C (it was C90 in those days); PCRE2 does 
use a few things from C99. However, getrlimit() is not a standard C 
function, so it cannot be used in the main library code. It *is* used in 
pcre2test, but only for those OS that support it. I don't want to start 
putting OS-specific things into the library code.

I am sorry to be so negative!

Note that pcre2_compile() has a callout feature for checking available 
stack (see pcre2_set_compile_recursion_guard()). I suppose something 
similar could be added to pcre2_match, but it would seriously affect 
performance and also requires the calling program to cooperate.

Philip

-- 
Philip Hazel

-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to