Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2025-04-04 22:26:51 +0000
committerTom Lane2025-04-04 22:26:51 +0000
commit0f43083d16f4be7c01efa80d05d0eef5e5ff69d3 (patch)
tree4c49b7fb4dcc0f6f1dbc85cbdc42bdab9d63a868 /src/backend/commands/tablecmds.c
parent2ef57908067ab29c22ae13f7775fe2afc330e8f6 (diff)
functions.c: copy trees from source_list before parse analysis etc.
This is yet another bit of fallout from the fact that backend/parser (like other code) feels free to scribble on the parse tree it's handed. In this case that resulted in modifying the relatively-short-lived copy in the cached function's source_list. That would be fine since we only need each source_list tree once ... except that if the parser fails after making some changes, the function cache entry remains as-is and will still be there if the user tries to execute the function again. Then we have problems because we're feeding a non-pristine tree to the parser. The most expedient fix is a quick copyObject(). I considered other answers like somehow marking the cache entry invalid temporarily, but that would add complexity and I'm not sure it's worth it. In typical scenarios we'd only do this once per function query per session. Reported-by: Alexander Lakhin <exclusion@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/6d442183-102c-498a-81d1-eeeb086cdc5a@gmail.com
Diffstat (limited to 'src/backend/commands/tablecmds.c')
0 files changed, 0 insertions, 0 deletions