Bug #79277 [NoF->Opn]: pdo_odbc accessing SAP 16.0 ASE Fatal error: Allowed memory size ...
| From: | cmb@php.net | Date: | Sun, 22 Mar 2020 12:31:23 +0000 |
| Subject: | Bug #79277 [NoF->Opn]: pdo_odbc accessing SAP 16.0 ASE Fatal error: Allowed memory size ... | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-226224@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79277&edit=1
ID: 79277
Updated by: cmb@php.net
Reported by: khleung at isfactory dot com
Summary: pdo_odbc accessing SAP 16.0 ASE Fatal error: Allowed
memory size ...
-Status: No Feedback
+Status: Open
Type: Bug
Package: PDO ODBC
Operating System: CentOS 7
PHP Version: 7.4.2
-Assigned To: cmb
+Assigned To:
Block user comment: N
Private report: N
New Comment:
Indeed, apparently there are no negative display sizes. I'm at a
loss; that probably needs to be debugged with a Sybase DB.
Previous Comments:
------------------------------------------------------------------------
[2020-03-22 12:25:24] khleung at isfactory dot com
[sybase@localhost ~]$ php sybconnect.php
dsn: odbc:SB007H Connected to ASE 16
displaysize == 255
displaysize == 11
displaysize == 11
displaysize == 2
displaysize == 6
displaysize == 6
displaysize == 6
displaysize == 6
displaysize == 11
displaysize == 23
displaysize == 23
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 6
displaysize == 11
displaysize == 6
displaysize == 24
displaysize == 30
displaysize == 39
displaysize == 6
displaysize == 16
displaysize == 6
displaysize == 3
displaysize == 3
displaysize == 11
displaysize == 11
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294967320 bytes)
in /home/sybase/sybconnect.php on line 14
[sybase@localhost ~]$
Seems not what you guess
------------------------------------------------------------------------
[2020-03-22 12:23:13] hleung at isfactory dot com
[sybase@localhost ~]$ php sybconnect.php
dsn: odbc:SB007H Connected to ASE 16
displaysize == 255
displaysize == 11
displaysize == 11
displaysize == 2
displaysize == 6
displaysize == 6
displaysize == 6
displaysize == 6
displaysize == 11
displaysize == 23
displaysize == 23
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 11
displaysize == 6
displaysize == 11
displaysize == 6
displaysize == 24
displaysize == 30
displaysize == 39
displaysize == 6
displaysize == 16
displaysize == 6
displaysize == 3
displaysize == 3
displaysize == 11
displaysize == 11
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294967320 bytes)
in /home/sybase/sybconnect.php on line 14
[sybase@localhost ~]$
------------------------------------------------------------------------
[2020-03-22 04:22:10] php-bugs at lists dot php dot net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.
------------------------------------------------------------------------
[2020-03-08 17:24:59] cmb@php.net
Thanks for checking! Unfortunately, it's hard to guess what's
going on without being able to reproduce, and also because the
ODBC trace lacks some relevant information about out parameters
(although it looks generally fine).
I can imagine that the displaysize returned by SQLColAttribute()
is negative, but even in that case I cannot track down where that
excessive allocation would happen. Still, it might help to try
with the following patch, which should print the retrieved
displaysizes to stderr:
ext/pdo_odbc/odbc_stmt.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c
index 18abc475b9..0d3cb45352 100644
--- a/ext/pdo_odbc/odbc_stmt.c
+++ b/ext/pdo_odbc/odbc_stmt.c
@@ -608,6 +608,7 @@ static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno)
return 0;
}
}
+ fprintf(stderr, "displaysize == %d\n", displaysize);
colsize = displaysize;
col->maxlen = S->cols[colno].datalen = colsize;
------------------------------------------------------------------------
[2020-03-08 07:48:05] khleung at isfactory dot com
[root@localhost ext]# cd /usr/local/src/php-7.4.2/ext/pdo_odbc/
[root@localhost pdo_odbc]# ls
config.m4 CREDITS odbc_driver.lo odbc_stmt.c odbc_stmt.o pdo_odbc.lo php_pdo_odbc.h
tests
config.w32 odbc_driver.c odbc_driver.o odbc_stmt.lo pdo_odbc.c pdo_odbc.o
php_pdo_odbc_int.h
[root@localhost pdo_odbc]# vi odbc_stmt.c
static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno)
{
pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
struct pdo_column_data *col = &stmt->columns[colno];
RETCODE rc;
SWORD colnamelen;
SQLULEN colsize;
SQLLEN displaysize = 0;
...
:wq
[root@localhost pdo_odbc]# cd /usr/local/src/php-7.4.2/
[root@localhost php-7.4.2]# make
/bin/sh /usr/local/src/php-7.4.2/libtool --silent --preserve-dup-deps --mode=install cp
ext/opcache/opcache.la /usr/local/src/php-7.4.2/modules
/bin/sh /usr/local/src/php-7.4.2/libtool --silent --preserve-dup-deps --mode=compile cc
-I/usr/local/src/php-7.4.2/ext -I/usr/include -DPDO_ODBC_TYPE=\"unixODBC\"
-Iext/pdo_odbc/ -I/usr/local/src/php-7.4.2/ext/pdo_odbc/ -DPHP_ATOM_INC
-I/usr/local/src/php-7.4.2/include -I/usr/local/src/php-7.4.2/main -I/usr/local/src/php-7.4.2
-I/usr/local/src/php-7.4.2/ext/date/lib -I/usr/include/libxml2 -I/usr/local/src/php-7.4.2/TSRM
-I/usr/local/src/php-7.4.2/Zend -I/usr/include -g -O2 -fvisibility=hidden -Wall
-Wno-strict-aliasing -DZEND_SIGNALS -c /usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c -o
ext/pdo_odbc/odbc_stmt.lo
/usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c: In function âodbc_stmt_describeâ:
/usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c:573:4: warning: pointer targets in passing
argument 3 of âSQLDescribeColâ differ in signedness [-Wpointer-sign]
&S->cols[colno].coltype, &colsize, NULL, NULL);
^
In file included from /usr/include/sqlext.h:43:0,
from /usr/include/sqlucode.h:784,
from /usr/local/src/php-7.4.2/ext/pdo_odbc/php_pdo_odbc_int.h:53,
from /usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c:29:
/usr/include/sql.h:644:24: note: expected âSQLCHAR *â but argument is of type âchar
*â
SQLRETURN SQL_API SQLDescribeCol(SQLHSTMT StatementHandle,
^
/usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c: In function âodbc_stmt_set_paramâ:
/usr/local/src/php-7.4.2/ext/pdo_odbc/odbc_stmt.c:781:4: warning: pointer targets in passing
argument 2 of âSQLSetCursorNameâ differ in signedness [-Wpointer-sign]
rc = SQLSetCursorName(S->stmt, Z_STRVAL_P(val), Z_STRLEN_P(val));
^
In file included from /usr/include/sqlext.h:43:0,
....
Build complete.
Don't forget to run 'make test'.
[root@localhost php-7.4.2]# make install
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20190902/
Installing PHP CLI binary: /usr/bin/
Installing PHP CLI man page: /usr/php/man/man1/
Installing phpdbg binary: /usr/bin/
Installing phpdbg man page: /usr/php/man/man1/
Installing PHP CGI binary: /usr/bin/
Installing PHP CGI man page: /usr/php/man/man1/
Installing build environment: /usr/lib/php/build/
Installing header files: /usr/include/php/
Installing helper programs: /usr/bin/
program: phpize
program: php-config
Installing man pages: /usr/php/man/man1/
page: phpize.1
page: php-config.1
/usr/local/src/php-7.4.2/build/shtool install -c ext/phar/phar.phar /usr/bin
ln -s -f phar.phar /usr/bin/phar
Installing PDO headers: /usr/include/php/ext/pdo/
[root@localhost php-7.4.2]# exit
[sybase@localhost ~]$ cd ~
[sybase@localhost ~]$ php sybconnect.php
dsn: odbc:SB007H Connected to ASE 16
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294967320 bytes)
in /home/sybase/sybconnect.php on line 14
[sybase@localhost ~]$ which php
/usr/bin/php
[sybase@localhost ~]$ ls -l /usr/bin/php
-rwxr-xr-x. 1 root root 32209632 Mar 8 23:34 /usr/bin/php
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79277
--
Edit this bug report at https://bugs.php.net/bug.php?id=79277&edit=1