#25109 [Fbk->Opn]: pgsql causes segmentation fault
| From: | cunha17 at uol dot com dot br | Date: | Wed, 27 Aug 2003 22:15:45 +0000 |
| Subject: | #25109 [Fbk->Opn]: pgsql causes segmentation fault | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-46788@lists.php.net to get a copy of this message | ||
ID: 25109
User updated by: cunha17 at uol dot com dot br
Reported By: cunha17 at uol dot com dot br
-Status: Feedback
+Status: Open
Bug Type: PostgreSQL related
Operating System: Redhat Linux 9.0 - Kernel 2.4.21
PHP Version: 4CVS-2003-08-20
New Comment:
As I told you I'm using John Lim's ADODB database library for PHP:
http://php.weblogs.com/adodb
I run the following PHP code:
<?
include_once("framework/adodb/adodb.inc.php");
$MM_conn_HOSTNAME = "10.67.92.57";
$MM_conn_DBTYPE = "postgres7";
$MM_conn_DATABASE = "teste";
$MM_conn_USERNAME = "teste";
$MM_conn_PASSWORD = "teste";
ADOLoadCode($MM_conn_DBTYPE);
$conn=&ADONewConnection($MM_conn_DBTYPE);
if($MM_conn_DBTYPE == "access" || $MM_conn_DBTYPE == "odbc"){
$conn->Connect($MM_conn_DATABASE,
$MM_conn_USERNAME,$MM_conn_PASSWORD);
} else if($MM_conn_DBTYPE == "ibase") {
$conn->Connect($MM_conn_HOSTNAME.":".$MM_conn_DATABASE,$MM_conn_USERNAME,$MM_conn_PASSWORD);
} else {
$conn->Connect($MM_conn_HOSTNAME,$MM_conn_USERNAME,$MM_conn_PASSWORD,$MM_conn_DATABASE);
}
$concatOp = $conn->concat_operator;
$rs = $conn->execute("SELECT * from teste") or
die($conn->errorMsg());;
print_r($rs->fields);
echo "ok";
?>
And got these last lines of backtrace(strace):
open("/webpages/sistemas/framework1.5/adodb/adodb.inc.php", O_RDONLY) =
4
fstat64(4, {st_mode=S_IFREG|0755, st_size=20000, ...}) = 0
fstat64(4, {st_mode=S_IFREG|0755, st_size=20000, ...}) = 0
lseek(4, 0, SEEK_CUR) = 0
lseek(4, 0, SEEK_SET) = 0
close(4) = 0
getcwd("/webpages/sistemas", 4096) = 19
lstat64("/webpages", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/webpages/sistemas", {st_mode=S_IFDIR|0750, st_size=4096,
...}) = 0
lstat64("/webpages/sistemas/framework1.5", {st_mode=S_IFDIR|0755,
st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb", {st_mode=S_IFDIR|0750,
st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb/drivers",
{st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres7.inc.php",
{st_mode=S_IFREG|0755, st_size=2246, ...}) = 0
open("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres7.inc.php",
O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0755, st_size=2246, ...}) = 0
fstat64(4, {st_mode=S_IFREG|0755, st_size=2246, ...}) = 0
lseek(4, 0, SEEK_CUR) = 0
lseek(4, 0, SEEK_SET) = 0
read(4, "<?php\r\n/*\r\n V3.40 7 April 2003 "..., 8192) = 2246
read(4, "", 8192) = 0
close(4) = 0
getcwd("/webpages/sistemas", 4096) = 19
lstat64("/webpages", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/webpages/sistemas", {st_mode=S_IFDIR|0750, st_size=4096,
...}) = 0
lstat64("/webpages/sistemas/framework1.5", {st_mode=S_IFDIR|0755,
st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb", {st_mode=S_IFDIR|0750,
st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb/drivers",
{st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
lstat64("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres64.inc.php",
{st_mode=S_IFREG|0755, st_size=21405, ...}) = 0
open("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres64.inc.php",
O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0755, st_size=21405, ...}) = 0
fstat64(4, {st_mode=S_IFREG|0755, st_size=21405, ...}) = 0
lseek(4, 0, SEEK_CUR) = 0
lseek(4, 0, SEEK_SET) = 0
read(4, "<?php\r\n/*\r\n V3.40 7 April 2003 "..., 8192) = 8192
brk(0) = 0x85cf000
brk(0x85d0000) = 0x85d0000
brk(0) = 0x85d0000
brk(0x85d1000) = 0x85d1000
brk(0) = 0x85d1000
brk(0x85d2000) = 0x85d2000
brk(0) = 0x85d2000
brk(0x85d3000) = 0x85d3000
brk(0) = 0x85d3000
brk(0x85d6000) = 0x85d6000
read(4, "\n\t{ \r\n\t\tpg_exec ($this->_connect"..., 8192) = 8192
brk(0) = 0x85d6000
brk(0x85d9000) = 0x85d9000
brk(0) = 0x85d9000
brk(0x85dd000) = 0x85dd000
brk(0) = 0x85dd000
brk(0x85ec000) = 0x85ec000
read(4, "f X field\r\n\t*/\r\n\tfunction TextMa"..., 8192) = 5021
brk(0) = 0x85ec000
brk(0x85ed000) = 0x85ed000
brk(0) = 0x85ed000
brk(0x85ee000) = 0x85ee000
brk(0) = 0x85ee000
brk(0x85f2000) = 0x85f2000
brk(0) = 0x85f2000
brk(0x85f5000) = 0x85f5000
read(4, "", 8192) = 0
close(4) = 0
brk(0) = 0x85f5000
brk(0x85f6000) = 0x85f6000
brk(0) = 0x85f6000
brk(0x85f7000) = 0x85f7000
brk(0) = 0x85f7000
brk(0x85fb000) = 0x85fb000
brk(0) = 0x85fb000
brk(0x85fd000) = 0x85fd000
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
connect(4, {sa_family=AF_INET, sin_port=htons(5432),
sin_addr=inet_addr("10.67.92.57")}, 16) = 0
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "\0\0\1(\4\322\26/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
296, 0) = 296
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
recv(4, "N", 1, 0) = 1
fcntl64(4, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
select(5, [], [4], [4], NULL) = 1 (out [4])
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "\0\0\1(\0\2\0\0teste\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
296, 0) = 296
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
select(5, [4], [], [4], NULL) = 1 (in [4])
recv(4, "R\0\0\0\0K\0\0\26\n\6\307\317\202Z", 16384, 0) = 15
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "Qbegin; select getdatabaseencodi"..., 45, 0) = 45
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
select(5, [4], [], [4], NULL) = 1 (in [4])
recv(4, "CBEGIN\0Pblank\0T\0\1getdatabaseenco"..., 16384, 0) = 79
brk(0) = 0x85fd000
brk(0x85fe000) = 0x85fe000
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "Qset datestyle=\'ISO\'\0", 21, 0) = 21
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
select(5, [4], [], [4], NULL) = 1 (in [4])
recv(4, "CSET\0Z", 16384, 0) = 6
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "QSELECT * from teste\0", 21, 0) = 21
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
select(5, [4], [], [4], NULL) = 1 (in [4])
recv(4, "Pblank\0T\0\2id\0\0\0\0\27\0\4\377\377\377\377texto\0\0"...,
16384, 0) = 81
brk(0) = 0x85fe000
brk(0x85ff000) = 0x85ff000
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
send(4, "Qselect oid,typname from pg_type"..., 33, 0) = 33
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
select(5, [4], [], [4], NULL) = 1 (in [4])
recv(4, "EERROR: pg_type: permission den"..., 16384, 0) = 38
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
It seems that the problem is some permission denied on the system
tables. IMHO PHP should raise an error if the script tries to access a
table that the connection user has no access on.
Previous Comments:
------------------------------------------------------------------------
[2003-08-26 19:06:42] iliaa@php.net
Could you please generate a backtrace of the crash and supply the query
you've run to trigger it.
------------------------------------------------------------------------
[2003-08-20 18:30:25] cunha17 at uol dot com dot br
The same problem happened with the latest PHP:
PHP4-STABLE-200308202130
------------------------------------------------------------------------
[2003-08-16 11:50:51] sniper@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
------------------------------------------------------------------------
[2003-08-16 11:47:12] cunha17 at uol dot com dot br
Description:
------------
I found out that pgsql functions cause segmentation fault if the
connection user has no read access on pg_ system tables.
I'm using John Lim's ADOdb class to access a PostgreSQL 7.2.4
database.
This problem has nothing to do with apache since it happens with the
CLI interface too.
Reproduce code:
---------------
With an empty postgresql installation, I created an empty database,
connected to it, created an user and set all privileges on this new
database to this user.
Connected as the new user on the new database I created some tables.
When trying to access this new tables with PHP and ADOdb classes, I got
a segmentation fault. At the very end, when running with strace, I got
a message before the segmentation fault saying:
'pg_class access denied'
When I grant read access on this table to the new user, I got:
'pg_attribute access denied' and so on...
When I grant read access to all pg_* tables, the problem disappear and
PHP runs ok.
Expected result:
----------------
PgSQL Error: Access denied to pg_* system table
or something like that.
Actual result:
--------------
Segmentation Fault if the connection user has no read access on system
tables
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=25109&edit=1