php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #44618 Fetching may rely on uninitialized data
Submitted: 2008-04-02 16:15 UTC Modified: 2020-10-06 11:38 UTC
Votes:5
Avg. Score:4.2 ± 1.6
Reproduced:3 of 4 (75.0%)
Same Version:2 (66.7%)
Same OS:2 (66.7%)
From: charlie at strausesoftware dot com Assigned: cmb (profile)
Status: Closed Package: ODBC related
PHP Version: 7.3 OS: Windows 2000
Private report: No CVE-ID: None
 [2008-04-02 16:15 UTC] charlie at strausesoftware dot com
Description:
------------
I'm using PHP with Apache. PHP code connects to MS SQL server using ODBC.

I'm doing a query against a table that is very simple: one column of the 
real data type, one of the text data type.

The text field is set to "testing 1,2,3". The real column is set to 
10.0199995.

When I use the default connect options, I get both values back fine.

When I use  SQL_CUR_USE_ODBC, which I very much want to use, then the text 
column data comes back as boolean(false).


Reproduce code:
---------------
Table:

CREATE TABLE [dbo].[test1](
[ID] [int] IDENTITY(1,1) NOT NULL,

[real1] [real] NULL,

[text1] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

CONSTRAINT [PK_test1] PRIMARY KEY CLUSTERED

(

[ID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Insert 1 row where text1 is set to "testing 1,2,3" and real1 is set to 10.0199995.

Code:

<?php
$conn = odbc_connect(db-name, user-name,password, SQL_CUR_USE_ODBC);
$result = odbc_exec($conn, "select * from test1");
if (odbc_fetch_row($result)) {
 print "Values: " . odbc_result($result,"real1") . "," . 
odbc_result($result,"text1");
}
?>


Expected result:
----------------
Values: 10.02,testing 1,2,3 

Actual result:
--------------
Values: 10.02, 

Patches

Pull Requests

Pull requests:

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-04-02 19:51 UTC] charlie at strausesoftware dot com
Actually, it fails just on a single text column in the table. If its text. Changing it to ntext in this case, works.
 [2008-04-16 15:26 UTC] charlie at strausesoftware dot com
On second thought, having that exact real number value in the real number field needs to be there for the error to happen.
 [2020-10-05 14:36 UTC] cmb@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: cmb
 [2020-10-05 14:36 UTC] cmb@php.net
I confirm this issue with ODBC 17 Driver for SQL Server.  The ODBC
cursor library has a hard time to emulate SQLGetData()[1] which is
used by the ODBC extension to retrieve "long" data.  Given that
the ODBC cursor library is deprecated, I don't see a point in
trying to improve the current handling, except that we really need
to properly handle the SQL_NO_DATA result.

[1] <https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/sqlgetdata-cursor-library>
 [2020-10-06 11:38 UTC] cmb@php.net
-Summary: Problem when using SQL_CUR_USE_ODBC on connec +Summary: Fetching may rely on uninitialized data -PHP Version: 5.2.5 +PHP Version: 7.3
 [2020-10-06 11:38 UTC] cmb@php.net
The following pull request has been associated:

Patch Name: Fix #44618: Fetching may rely on uninitialized data
On GitHub:  https://github.com/php/php-src/pull/6281
Patch:      https://github.com/php/php-src/pull/6281.patch
 [2020-10-29 11:05 UTC] cmb@php.net
Automatic comment on behalf of cmbecker69@gmx.de
Revision: http://git.php.net/?p=php-src.git;a=commit;h=c21e901ba735e927e345b65a35fcd6f585d0c2f3
Log: Fix #44618: Fetching may rely on uninitialized data
 [2020-10-29 11:05 UTC] cmb@php.net
-Status: Verified +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 15:01:30 2024 UTC