Обсуждение: BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction
BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction
От
PG Bug reporting form
Дата:
The following bug has been logged on the website:
Bug reference: 16466
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 13beta1
Operating system: Ubuntu 18.04
Description:
When running under valgrind the following query (based on
contrib/dblink/sql/dblink.sql):
CREATE EXTENSION dblink;
CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
SELECT $$dbname='$$||current_database()||$$'
port=$$||current_setting('port');
$f$;
SELECT dblink_connect('myconn',connection_parameters());
SELECT dblink_exec('myconn','BEGIN');
SELECT dblink_open('myconn','xxx','SELECT 1');
The following error is detected:
==00:00:00:07.723 2378719== Conditional jump or move depends on
uninitialised value(s)
==00:00:00:07.723 2378719== at 0x486A5D0: dblink_open (dblink.c:492)
==00:00:00:07.723 2378719== by 0x3BCA2B: ExecInterpExpr
(execExprInterp.c:699)
==00:00:00:07.723 2378719== by 0x3B97F0: ExecInterpExprStillValid
(execExprInterp.c:1802)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecEvalExprSwitchContext
(executor.h:313)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecProject (executor.h:347)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecResult (nodeResult.c:136)
==00:00:00:07.723 2378719== by 0x3C90EC: ExecProcNodeFirst
(execProcnode.c:450)
==00:00:00:07.723 2378719== by 0x3C139B: ExecProcNode (executor.h:245)
==00:00:00:07.723 2378719== by 0x3C139B: ExecutePlan (execMain.c:1646)
==00:00:00:07.723 2378719== by 0x3C1FEC: standard_ExecutorRun
(execMain.c:364)
==00:00:00:07.723 2378719== by 0x3C20BA: ExecutorRun (execMain.c:308)
==00:00:00:07.723 2378719== by 0x55FED3: PortalRunSelect (pquery.c:912)
==00:00:00:07.723 2378719== by 0x5615C7: PortalRun (pquery.c:756)
==00:00:00:07.723 2378719== by 0x55D8F0: exec_simple_query
(postgres.c:1239)
==00:00:00:07.723 2378719== by 0x55F7F5: PostgresMain (postgres.c:4315)
==00:00:00:07.724 2378719==
On 5/27/20 2:00 PM, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 16466
> Logged by: Alexander Lakhin
> Email address: exclusion@gmail.com
> PostgreSQL version: 13beta1
> Operating system: Ubuntu 18.04
> Description:
>
> When running under valgrind the following query (based on
> contrib/dblink/sql/dblink.sql):
> CREATE EXTENSION dblink;
> CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
> SELECT $$dbname='$$||current_database()||$$'
> port=$$||current_setting('port');
> $f$;
> SELECT dblink_connect('myconn',connection_parameters());
> SELECT dblink_exec('myconn','BEGIN');
> SELECT dblink_open('myconn','xxx','SELECT 1');
>
> The following error is detected:
> ==00:00:00:07.723 2378719== Conditional jump or move depends on
> uninitialised value(s)
> ==00:00:00:07.723 2378719== at 0x486A5D0: dblink_open (dblink.c:492)
Hmmm, looks like a couple of the members of rconn are left uninitialized.
When dblink_open() is called *without* an outer transaction it handles the
initialization for us, but *with* an outer transaction it does not :-(
I think the attached fixes it.
Joe
--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development
Вложения
Re: BUG #16466: Valgrind detects an invalid read in dblink_open()with a cursor inside a transaction
От
Alexander Lakhin
Дата:
Hello Joe, 27.05.2020 22:58, Joe Conway wrote: > Hmmm, looks like a couple of the members of rconn are left uninitialized. > > When dblink_open() is called *without* an outer transaction it handles the > initialization for us, but *with* an outer transaction it does not :-( > > I think the attached fixes it. Yes, your patch makes valgrind silent. Thanks! Best regards, Alexander
On 5/27/20 5:00 PM, Alexander Lakhin wrote: > Hello Joe, > > 27.05.2020 22:58, Joe Conway wrote: >> Hmmm, looks like a couple of the members of rconn are left uninitialized. >> >> When dblink_open() is called *without* an outer transaction it handles the >> initialization for us, but *with* an outer transaction it does not :-( >> >> I think the attached fixes it. > Yes, your patch makes valgrind silent. > Thanks! Thanks for checking! Pushed to all supported branches. Joe -- Crunchy Data - http://crunchydata.com PostgreSQL Support for Secure Enterprises Consulting, Training, & Open Source Development