From: | Alexander Lakhin <exclusion(at)gmail(dot)com> |
---|---|
To: | Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Extending outfuncs support to utility statements |
Date: | 2023-03-19 12:00:01 |
Message-ID: | 4995256b-cc65-170e-0b22-60ad2cd535f1@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hello,
26.09.2022 17:46, Peter Eisentraut wrote:
> On 22.09.22 23:21, Tom Lane wrote:
>> Anyway, this is a bit far afield from the stated topic of this
>> thread. I think we should commit something approximately like
>> what I posted and then start a new thread specifically about
>> what we'd like to do about utility commands in new-style SQL
>> functions.
>
> Right, I have committed everything and will close the CF entry. I don't have a specific idea about how to move
> forward right now.
Please look at the function _readA_Const() (introduced in a6bc33019), which fails on current master under valgrind:
CPPFLAGS="-DUSE_VALGRIND -DWRITE_READ_PARSE_PLAN_TREES -Og " ./configure -q --enable-debug && make -s -j8 && make check
============== creating temporary instance ==============
============== initializing database system ==============
pg_regress: initdb failed
Examine .../src/test/regress/log/initdb.log for the reason.
initdb.log contains:
performing post-bootstrap initialization ... ==00:00:00:02.155 3419654== Invalid read of size 16
==00:00:00:02.155 3419654== at 0x448691: memcpy (string_fortified.h:29)
==00:00:00:02.155 3419654== by 0x448691: _readA_Const (readfuncs.c:315)
==00:00:00:02.155 3419654== by 0x44CCD2: parseNodeString (readfuncs.switch.c:129)
==00:00:00:02.155 3419654== by 0x4348D6: nodeRead (read.c:338)
==00:00:00:02.155 3419654== by 0x434879: nodeRead (read.c:452)
==00:00:00:02.155 3419654== by 0x440E6C: _readTypeName (readfuncs.funcs.c:830)
==00:00:00:02.155 3419654== by 0x44CC3A: parseNodeString (readfuncs.switch.c:121)
==00:00:00:02.155 3419654== by 0x4348D6: nodeRead (read.c:338)
==00:00:00:02.155 3419654== by 0x43D51D: _readFunctionParameter (readfuncs.funcs.c:2513)
==00:00:00:02.155 3419654== by 0x44DE0C: parseNodeString (readfuncs.switch.c:367)
==00:00:00:02.155 3419654== by 0x4348D6: nodeRead (read.c:338)
==00:00:00:02.155 3419654== by 0x434879: nodeRead (read.c:452)
==00:00:00:02.155 3419654== by 0x438A9C: _readCreateFunctionStmt (readfuncs.funcs.c:2499)
==00:00:00:02.155 3419654== Address 0xf12f718 is 0 bytes inside a block of size 8 client-defined
==00:00:00:02.155 3419654== at 0x6A70C3: MemoryContextAllocZeroAligned (mcxt.c:1109)
==00:00:00:02.155 3419654== by 0x450C31: makeInteger (value.c:25)
==00:00:00:02.155 3419654== by 0x434D59: nodeRead (read.c:482)
==00:00:00:02.155 3419654== by 0x448690: _readA_Const (readfuncs.c:313)
==00:00:00:02.155 3419654== by 0x44CCD2: parseNodeString (readfuncs.switch.c:129)
==00:00:00:02.155 3419654== by 0x4348D6: nodeRead (read.c:338)
==00:00:00:02.155 3419654== by 0x434879: nodeRead (read.c:452)
==00:00:00:02.155 3419654== by 0x440E6C: _readTypeName (readfuncs.funcs.c:830)
==00:00:00:02.155 3419654== by 0x44CC3A: parseNodeString (readfuncs.switch.c:121)
==00:00:00:02.155 3419654== by 0x4348D6: nodeRead (read.c:338)
==00:00:00:02.155 3419654== by 0x43D51D: _readFunctionParameter (readfuncs.funcs.c:2513)
==00:00:00:02.155 3419654== by 0x44DE0C: parseNodeString (readfuncs.switch.c:367)
==00:00:00:02.155 3419654==
Here _readA_Const() performs:
union ValUnion *tmp = nodeRead(NULL, 0);
memcpy(&local_node->val, tmp, sizeof(*tmp));
where sizeof(union ValUnion) = 16, but nodeRead()->makeInteger() produced Integer (sizeof(Integer) = 8).
Best regards,
Alexander
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry Dolgov | 2023-03-19 12:27:34 | Re: pg_stat_statements and "IN" conditions |
Previous Message | Michael Paquier | 2023-03-19 11:45:00 | Re: Fix fseek() detection of unseekable files on WIN32 |