• Tom Lane's avatar
    Teach flatten_reloptions() to quote option values safely. · c7e27bec
    Tom Lane authored
    flatten_reloptions() supposed that it didn't really need to do anything
    beyond inserting commas between reloption array elements.  However, in
    principle the value of a reloption could be nearly anything, since the
    grammar allows a quoted string there.  Any restrictions on it would come
    from validity checking appropriate to the particular option, if any.
    
    A reloption value that isn't a simple identifier or number could thus lead
    to dump/reload failures due to syntax errors in CREATE statements issued
    by pg_dump.  We've gotten away with not worrying about this so far with
    the core-supported reloptions, but extensions might allow reloption values
    that cause trouble, as in bug #13840 from Kouhei Sutou.
    
    To fix, split the reloption array elements explicitly, and then convert
    any value that doesn't look like a safe identifier to a string literal.
    (The details of the quoting rule could be debated, but this way is safe
    and requires little code.)  While we're at it, also quote reloption names
    if they're not safe identifiers; that may not be a likely problem in the
    field, but we might as well try to be bulletproof here.
    
    It's been like this for a long time, so back-patch to all supported
    branches.
    
    Kouhei Sutou, adjusted some by me
    c7e27bec
ruleutils.c 275 KB