Обсуждение: 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