Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: cf/5522~1
Choose a base ref
...
head repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: cf/5522
Choose a head ref
  • 1 commit
  • 1 file changed
  • 1 contributor

Commits on Apr 4, 2025

  1. 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 <[email protected]>
    Author: Tom Lane <[email protected]>
    Discussion: https://postgr.es/m/[email protected]
    tglsfdc committed Apr 4, 2025
    Configuration menu
    Copy the full SHA
    0f43083 View commit details
    Browse the repository at this point in the history
Loading