php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #45497 memory leak in select statement for varchar2 above 2000 characters
Submitted: 2008-07-13 07:49 UTC Modified: 2009-02-05 22:20 UTC
From: teju_baba at hotmail dot com Assigned: sixd (profile)
Status: Not a bug Package: OCI8 related
PHP Version: 5.2.6 OS: Solaris 10
Private report: No CVE-ID: None
 [2008-07-13 07:49 UTC] teju_baba at hotmail dot com
Description:
------------
Client: Solaris 10 / Sparc
PHP 5.2.3 / 5.2.5 / 5.2.6 
OCI 1.2.3 / 1.3.3
Instant Client: 10.1
Oracle 10g Enterprise Edition: 10.1.0.3

TABLE AGENCY SCHEMA
AGENCY_ID NUMBER, AGENCY_NAME VARCHAR2(60), AGENCY_TYPE VARCHAR2(1) ,
AGENCY_ABBR VARCHAR2(10) , ADMIN_HIST VARCHAR2(2000),
DATE_UPDATED DATE 

A simple query like select * from agency where agency_id=40 produces an overflow at either oci_execute() or oci_fetch_assoc()

Result is garbage for ADMIN_HIST and overflows on to DATE_UPDATED.

For similar queries, the query may or may not return a row.
Say: select * from agency where agency_id=54 returns NULL when there is valid data.




Reproduce code:
---------------
$conn = oci_connect('user', 'pwd', '//10.203.2.14/db');
$query="select * from agency where agency_id=40";
$stid = oci_parse($conn, $query);
$r = oci_execute($stid, OCI_DEFAULT);
while ($row = oci_fetch_assoc($stid)) { 
print_r($row);
}
oci_close($conn);

Expected result:
----------------
xl*
[DATE_UPDATED] => 00-DECEMBER-00

the words xl * are garbage characters
the DATE_UPDATED is invalid (actual date is: 11-APR-08)





Actual result:
--------------
Array
(
[AGENCY_ID] => 40
[AGENCY_NAME] => City Council
[AGENCY_TYPE] => A
[AGENCY_ABBR] => CC
[ADMIN_HIST] => The Municipal Council became known as the City Council on 22 September 1951. The City Council, the local authority within the city area, consisted of a President appointed by the Governor-in-Council and 27 members of whom 18 were elected.

The City Council enjoyed a wide measure of autonomy in matters placed under its control by the Municipal Ordinance and was empowered to make by-laws but was subjected to certain safeguards. The detailed execution of City Council policies was undertaken by specialised departments concerned with health, water, electricity and so forth.

Under the Local Government Ordinance of 1957, the administration of the city area for all local government purposes was the responsibility of a City Council of 32 elected Councillors.In July 1959, the government absorbed the City Council into the central government and most of its functions were transferred to the Ministry of National Development.xl*
[DATE_UPDATED] => 00-DECEMBER-00
)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-07-13 07:54 UTC] teju_baba at hotmail dot com
Here is another example:
$query="select catalogue_id, accession_no, negative_no, collection_title, subject, caption, medium, source, source_address, source_contact_person, location, shelf_no, image_no, access_code, photocd_id, photocd_no, accession_condition, remark, owner, status, changed_by, search_field, access_id, old_accession_no, image_link, external_source, cat_remarks from PC_CATALOGUE where CATALOGUE_ID='0000289713'";

Actual Result overflows on search_field and results in garbage for the following fields:

Array
(
[CATALOGUE_ID] => 0000289713
[ACCESSION_NO] => 0
[NEGATIVE_NO] => S128961
[COLLECTION_TITLE] =>
[SUBJECT] => CONSTITUENCIES (VISIT, MEET PEOPLE SESSION, ETC)
[CAPTION] => COMMUNICATIONS AND LABOUR MINISTER ONG TENG CHEONG TOURING AYER RAJAH CONSTITUENCY [GROUP DESCRIPTION BY EVENT FROM TRANSFERRING AGENCY]
[MEDIUM] => PCD
[SOURCE] => MINISTRY OF INFORMATION AND THE ARTS (MITA)
[SOURCE_ADDRESS] =>
[SOURCE_CONTACT_PERSON] =>
[LOCATION] =>
[SHELF_NO] =>
[IMAGE_NO] => 0044
[ACCESS_CODE] => B
[PHOTOCD_ID] => 8262-3202-1062
[PHOTOCD_NO] => 19980006698
[ACCESSION_CONDITION] =>
[REMARK] =>
[OWNER] => CD IMAGING
[STATUS] => 0
[CHANGED_BY] => CD IMAGING
[SEARCH_FIELD] => C
[ACCESS_ID] => MMUNICATIONS AND LAB
[OLD_ACCESSION_NO] => -10301922162169333218341928211728222369351200000000000000000000
[IMAGE_LINK] => EVENT FROM TRANSFERRING AGENCY] CONSTITUENCIES (VISIT, MEET PEOPLE
[EXTERNAL_SOURCE] => SESSION, ETC) MINISTRY OF INFORM
[CAT_REMARKS] =>)
 [2008-07-13 17:24 UTC] sixd@php.net
Can you email me CREATE TABLE and example (not real data) INSERT statements so I have the same values as you?  Also let me know your NLS_LANG or other globalization settings, and exact DB version.
 [2008-07-15 06:10 UTC] teju_baba at hotmail dot com
This is the create statement for the 2 tables.
CREATE TABLE "NAS"."AGENCY" 
( 
"AGENCY_ID" NUMBER(9), 
"AGENCY_NAME" VARCHAR2(60) NOT NULL , 
"AGENCY_TYPE" VARCHAR2(1) NOT NULL , 
"AGENCY_ABBR" VARCHAR2(10), 
"ADMIN_HIST" VARCHAR2(2000) NOT NULL , 
"DATE_UPDATED" DATE NOT NULL , 
PRIMARY KEY ("AGENCY_ID") VALIDATE ) 
TABLESPACE "USERS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 128K BUFFER_POOL DEFAULT) LOGGING;

CREATE TABLE "PIC"."PC_CATALOGUE" ( 
"CATALOGUE_ID" CHAR(10), 
"ACCESSION_NO" VARCHAR2(30), 
"NEGATIVE_NO" VARCHAR2(30), 
"COLLECTION_TITLE" VARCHAR2(1024), 
"SUBJECT" VARCHAR2(1024), 
"CAPTION" VARCHAR2(1024), 
"MEDIUM" VARCHAR2(3), 
"SOURCE" VARCHAR2(255), 
"SOURCE_ADDRESS" VARCHAR2(255), 
"SOURCE_CONTACT_PERSON" VARCHAR2(30), 
"LOCATION" VARCHAR2(10), 
"SHELF_NO" VARCHAR2(10), 
"IMAGE_NO" VARCHAR2(10), 
"ACQUIRED_DATE" DATE, 
"ACCESSION_DATE" DATE, 
"RECORDING_DATE" DATE, 
"ACCESS_CODE" VARCHAR2(3), 
"PHOTOCD_ID" VARCHAR2(50), 
"PHOTOCD_NO" VARCHAR2(50), 
"ACCESSION_CONDITION" VARCHAR2(50), 
"REMARK" VARCHAR2(255), 
"OWNER" VARCHAR2(30), 
"STATUS" CHAR(1), 
"CHANGED_BY" VARCHAR2(30), 
"CHANGE_DATE" DATE, 
"SEARCH_FIELD" VARCHAR2(4000), 
"ACCESS_ID" VARCHAR2(20), 
"CREATE_DATE" DATE, 
"OLD_ACCESSION_NO" NUMBER(10), 
"IMAGE_LINK" VARCHAR2(1024), 
"EXTERNAL_SOURCE" VARCHAR2(255), 
"CAT_REMARKS" VARCHAR2(4000),
 CONSTRAINT "PC_CATALOGUE_PK" PRIMARY KEY ("CATALOGUE_ID") VALIDATE ) 
TABLESPACE "USERS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 409600K BUFFER_POOL DEFAULT) LOGGING;

Environment Variables:
MANPATH=:/usr/man:/usr/share/man:/opt/SUNWvts/man:/opt/SUNWexplo/man:/opt/SUNWsneep/man:/opt/CTEact/man
TOMCAT_HOME=/otej/sunSparcSol10/tomcat/apache-tomcat-5.5.26
TERM=xterm
SHELL=/bin/bash
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
TMPDIR=/var/tmp
SSH_CLIENT=10.203.2.27 3622 22
OLDPWD=/
SSH_TTY=/dev/pts/2
USER=root
LD_LIBRARY_PATH=:/otej/instantclient:/usr/openwin/lib
OPENWINHOME=/usr/openwin
WEBLOGIC_HOME=/usr/local/bea/weblogic81/server/bin
MAIL=/var/mail//root
PATH=/usr/sbin:/usr/bin:/usr/local/bin:/otej/j2sdk1.4.2_16/bin:/bin:/usr/ccs/bin:/usr/openwin/bin:/usr/dt/bin:/usr/platform/SUNW,Sun-Fire-V245/sbin:/opt/sun/bin:/opt/SUNWvts/bin:/opt/SUNWexplo/bin:/opt/SUNWsneep/bin:/opt/CTEact/bin
PWD=/otej/project/a2osync
JAVA_HOME=/otej/j2sdk1.4.2_16
EDITOR=vi
TZ=Singapore
PS1=root@app-svr-03 #
PS2=root@app-svr-03 >
SHLVL=1
HOME=/
LOGNAME=root
SSH_CONNECTION=10.203.2.27 3622 10.203.2.72 22
_=/usr/bin/env

* TNS_ADMIN is not set as i do not use tnsnames.ora
setting it to "/otej/instantclient" does not help either

Versions:
Machine 1: (Web server with Oracle Instant Client)
OS: Solaris 10
PHP: 5.2.6
OCI: 1.3.3
Oracle Instant Client: 10.1.0.3

Machine 2: (Oracle DB)
OS: Linux (Redhat Enterprise 3)
Oracle: 10g Enterprise Edition: 10.1.0.3

I'll try to send you the sample data soon.
 [2009-02-05 22:20 UTC] sixd@php.net
Re-tested and this still doesn't reproduce.  I used OCI8 1.3.4 with Linux.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu May 02 03:01:29 2024 UTC