• Tom Lane's avatar
    Improve performance of pullback/pushfwd in regular-expression compiler. · 6a715366
    Tom Lane authored
    The previous coding would create a new intermediate state every time it
    wanted to interchange the ordering of two constraint arcs.  Certain regex
    features such as \Y can generate large numbers of parallel constraint arcs,
    and if we needed to reorder the results of that, we created unreasonable
    numbers of intermediate states.  To improve matters, keep a list of
    already-created intermediate states associated with the state currently
    being considered by the outer loop; we can re-use such states to place all
    the new arcs leading to the same destination or source.
    
    I also took the trouble to redefine push() and pull() to have a less risky
    API: they no longer delete any state or arc that the caller might possibly
    have a pointer to, except for the specifically-passed constraint arc.
    This reduces the risk of re-introducing the same type of error seen in
    the failed patch for CVE-2007-4772.
    
    Back-patch to all supported branches.
    6a715366
regc_nfa.c 78.4 KB