The following bug has been logged on the website:
Bug reference: 11335
Logged by: invalid prepare statement causes crash at log_statement = 'mod' or 'ddl'.
Email address: harukat@sraoss.co.jp
PostgreSQL version: 9.3.5
Operating system: CentOS 6.2 (64bit / gcc 4.4.7)
Description:
setting:
log_statement = 'mod' # or 'ddl'
reproduction client code:
<?php
require_once 'MDB2.php';
$con1 =& MDB2::connect("pgsql://postgres@localhost/db1");
if (PEAR::isError($con1)) { die($con1->getMessage()); }
$sth = $con1->prepare("");
if (PEAR::isError($sth)) { die($sth->getMessage()); }
$sth->execute();
?>
log messages:
2014-09-02 19:41:57 JST 9453 LOG: server process (PID 10372) was
terminated by signal11: Segmentation fault
2014-09-02 19:41:57 JST 9453 DETAIL: Failed process was running:
EXECUTE mdb2_statement_pgsql_9cc7dc53dfc30b3c2b937c650346f586
This occur in 9.3.5 and 9.1.14. (It probably occur at any versions.)
I tested that the following fix prevent this crash.
*** ./src/backend/tcop/utility.c 2014-09-02 19:32:44.735266203 +0900
--- ./src/backend/tcop/utility.c.ORG 2014-09-02 18:17:47.631854101 +0900
***************
*** 2307,2314 ****
GetCommandLogLevel(Node *parsetree)
{
LogStmtLevel lev;
- if (! parsetree)
- return LOGSTMT_ALL;
switch (nodeTag(parsetree))
{
--- 2307,2312 ----
Though we should throw ERROR for empty prepared statement,
I hope for a symptomatic treatment such as the above.
Because an application package use such wrong query.
----------------------------------------------------------
Haruka Takatsuka
harukat@sraoss.co.jp SRA OSS, Inc. http://www.sraoss.co.jp