• Tom Lane's avatar
    Add recursion depth protections to regular expression matching. · b63fc287
    Tom Lane authored
    Some of the functions in regex compilation and execution recurse, and
    therefore could in principle be driven to stack overflow.  The Tcl crew
    has seen this happen in practice in duptraverse(), though their fix was
    to put in a hard-wired limit on the number of recursive levels, which is
    not too appetizing --- fortunately, we have enough infrastructure to check
    the actually available stack.  Greg Stark has also seen it in other places
    while fuzz testing on a machine with limited stack space.  Let's put guards
    in to prevent crashes in all these places.
    
    Since the regex code would leak memory if we simply threw elog(ERROR),
    we have to introduce an API that checks for stack depth without throwing
    such an error.  Fortunately that's not difficult.
    b63fc287
postgres.c 117 KB