From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix pl/tcl's handling of errors from Tcl_ListObjGetElements(). |
Date: | 2024-06-04 22:02:36 |
Message-ID: | E1sEcEl-0000uj-HK@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix pl/tcl's handling of errors from Tcl_ListObjGetElements().
In a procedure or function returning tuple, we use that function to
parse the Tcl script's result, which is supposed to be a Tcl list.
If it isn't, you get an error. Commit 26abb50c4 incautiously
supposed that we could use throw_tcl_error() to report such an error.
That doesn't actually work, because low-level functions like
Tcl_ListObjGetElements() don't fill Tcl's errorInfo variable.
The result is either a null-pointer-dereference crash or emission
of misleading context information describing the previous Tcl error.
Back off to just reporting the interpreter's result string, and
improve throw_tcl_error()'s comment to explain when to use it.
Also, although the similar code in pltcl_trigger_handler() avoided
this mistake, it was using a fairly confusing wording of the
error message. Improve that while we're here.
Per report from A. Kozhemyakin. Back-patch to all supported
branches.
Erik Wienhold and Tom Lane
Discussion: https://postgr.es/m/6a2a1c40-2b2c-4a33-8b72-243c0766fcda@postgrespro.ru
Branch
------
REL_12_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/30487423c8296ea448f4deb56f5caec46111b763
Modified Files
--------------
src/pl/tcl/expected/pltcl_call.out | 8 ++++++++
src/pl/tcl/pltcl.c | 11 +++++++++--
src/pl/tcl/sql/pltcl_call.sql | 11 +++++++++++
3 files changed, 28 insertions(+), 2 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | David Rowley | 2024-06-05 09:32:30 | pgsql: Fix some grammatical errors in some comments |
Previous Message | Dean Rasheed | 2024-06-04 10:54:50 | pgsql: Fix PL/pgSQL's handling of integer ranges containing underscores |