• Tom Lane's avatar
    Don't leak compiled regex(es) when an ispell cache entry is dropped. · d303849b
    Tom Lane authored
    The text search cache mechanisms assume that we can clean up
    an invalidated dictionary cache entry simply by resetting the
    associated long-lived memory context.  However, that does not work
    for ispell affixes that make use of regular expressions, because
    the regex library deals in plain old malloc.  Hence, we leaked
    compiled regex(es) any time we dropped such a cache entry.  That
    could quickly add up, since even a fairly trivial regex can use up
    tens of kB, and a large one can eat megabytes.  Add a memory context
    callback to ensure that a regex gets freed when its owning cache
    entry is cleared.
    
    Found via valgrind testing.
    This problem is ancient, so back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us
    d303849b
spell.h 5.42 KB