Bug #80783 [Ver]: PDO ODBC truncates BLOB records at every 256th byte
| From: | cmb@php.net | Date: | Tue, 23 Feb 2021 11:43:25 +0000 |
| Subject: | Bug #80783 [Ver]: PDO ODBC truncates BLOB records at every 256th byte | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-232343@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80783&edit=1
ID: 80783
Updated by: cmb@php.net
Reported by: horvath dot szabolcs at t-systems dot hu
Summary: PDO ODBC truncates BLOB records at every 256th byte
Status: Verified
Type: Bug
Package: PDO ODBC
Operating System: Red Hat Enterprise Linux Server
PHP Version: 7.3.27
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Thanks for the swift reply and confirmation! Note, though, that
the PR has not yet been merged, and I'm actually surprised that it
fixes the issue for you, since your ODBC trace hints at missing
trailing NUL bytes, for what the patch doesn't cater to.
Particularly, there is likely an assertion failure with debug
builds.
Previous Comments:
------------------------------------------------------------------------
[2021-02-23 08:20:28] horvath dot szabolcs at t-systems dot hu
Thank for your quick response! It seems the bug has been fixed.
Nice job.
Anyone coming from RHEL systems: I opened a support ticket (Case 02876261) asking for a backport to
their SCL tree.
------------------------------------------------------------------------
[2021-02-22 14:24:02] cmb@php.net
Could you please *test* the patch? Note though, that PHP 7.3 is
no longer actively supported, so the patch targets PHP 7.4. It
may still work with PHP 7.3, though.
------------------------------------------------------------------------
[2021-02-22 14:21:49] cmb@php.net
The following pull request has been associated:
Patch Name: Fix #80783: PDO ODBC truncates BLOB records at every 256th byte
On GitHub: https://github.com/php/php-src/pull/6716
Patch: https://github.com/php/php-src/pull/6716.patch
------------------------------------------------------------------------
[2021-02-22 10:17:41] horvath dot szabolcs at t-systems dot hu
Actual php-pdo trace:
[ODBC][32334][1613745952.889923][SQLConnect.c][3721]
Entry:
Connection = 0x55e05fc8d200
Server Name = [ORACLETEST][length = 11 (SQL_NTS)]
User Name = [user][length = 11 (SQL_NTS)]
Authentication = [********][length = 8 (SQL_NTS)]
UNICODE Using encoding ASCII 'UTF-8' and UNICODE 'UTF16LE'
[ODBC][32334][1613745953.041731][SQLConnect.c][4299]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.042039][SQLAllocHandle.c][540]
Entry:
Handle Type = 3
Input Handle = 0x55e05fc8d200
[ODBC][32334][1613745953.042303][SQLAllocHandle.c][1085]
Exit:[SQL_SUCCESS]
Output Handle = 0x55e05fe1fd30
[ODBC][32334][1613745953.042520][SQLPrepare.c][196]
Entry:
Statement = 0x55e05fe1fd30
SQL = [SELECT pdf FROM PAYROLL WHERE USER_ID = 999 AND ROWNUM = 1 ORDER BY
YEAR DESC, MONTH DESC][length = 89 (SQL_NTS)]
[ODBC][32334][1613745953.042850][SQLPrepare.c][377]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.043093][SQLExecute.c][187]
Entry:
Statement = 0x55e05fe1fd30
[ODBC][32334][1613745953.044674][SQLExecute.c][357]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.044917][SQLRowCount.c][173]
Entry:
Statement = 0x55e05fe1fd30
Row Count = 0x7fff668370c8
[ODBC][32334][1613745953.045158][SQLRowCount.c][247]
Exit:[SQL_SUCCESS]
Row Count = 0x7fff668370c8 -> -1
[ODBC][32334][1613745953.045373][SQLNumResultCols.c][156]
Entry:
Statement = 0x55e05fe1fd30
Column Count = 0x7fff668370d0
[ODBC][32334][1613745953.045602][SQLNumResultCols.c][251]
Exit:[SQL_SUCCESS]
Count = 0x7fff668370d0 -> 1
[ODBC][32334][1613745953.045871][SQLDescribeCol.c][247]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Column Name = 0x7f4fed4810da
Buffer Length = 127
Name Length = 0x7fff66837096
Data Type = 0x7f4fed4810d8
Column Size = 0x7fff66837098
Decimal Digits = (nil)
Nullable = (nil)
[ODBC][32334][1613745953.046112][SQLDescribeCol.c][504]
Exit:[SQL_SUCCESS]
Column Name = [PDF]
Data Type = 0x7f4fed4810d8 -> -4
Column Size = 0x7fff66837098 -> 2147483647
Decimal Digits = NULLPTR
Nullable = NULLPTR
[ODBC][32334][1613745953.046327][SQLColAttribute.c][294]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Field Identifier = SQL_DESC_DISPLAY_SIZE
Character Attr = (nil)
Buffer Length = 0
String Length = (nil)
Numeric Attribute = 0x7fff668370a0
[ODBC][32334][1613745953.046550][SQLColAttribute.c][709]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.046789][SQLFetchScroll.c][159]
Entry:
Statement = 0x55e05fe1fd30
Fetch Orentation = 1
Fetch Offset = 0
[ODBC][32334][1613745953.051041][SQLFetchScroll.c][356]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.051281][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f000
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.051520][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[UDEyRGJHdDdYdys0US9BNGxPaWpTbmJ2Q1lBSFFOczBLVUx0TnNTaHBCcjF6WEZ2dm9XZWt3VUtRSmJGVmJmRHBnWWg0MlhjckdTZjJBWWkvMG14VWNYT3htUm5BTy9m]
Strlen Or Ind = 0x7f4fed4810d0 -> 25744
[ODBC][32334][1613745953.051771][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.051995][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[Q3c3OGI2bnJycmVQMktmc2VNOWRmZ2c1ZVJDUUh0bFZNZCsyMWRjRHZnVTBrRjlCTE4wMWRKUTl4YjhkSDdoN3NBSTF0akdLT2ZvVGlTU3R6RnZJQmhSVGNGU3ZkRUxp]
Strlen Or Ind = 0x7f4fed4810d0 -> 25488
[ODBC][32334][1613745953.052224][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.052459][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[K0wzTHZabE1KejhOcHpIblVuYXJzTktXTmdvWEw0YlNPa2l0b0FTNkNvOFVtc1hzYnNXTGErVnVDbXVXUHdLTGZTWGtIUHR0aDVwZU1LRS9DNDlONVhKSjN2S21zOFl2]
Strlen Or Ind = 0x7f4fed4810d0 -> 25232
[ODBC][32334][1613745953.052681][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.052908][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[NjEzbVVOK0pWRG55YnRvVDFoZENjYTFsdC9LbHk4N3JFRGhySkhBLzAyVFNYV3ROOUhhcU9RQnMwc1R1eUJoWitURmxMTkJIQUloeXVTeXJPR1F3djdLaElVZWMvZHcz]
Strlen Or Ind = 0x7f4fed4810d0 -> 24976
[ODBC][32334][1613745953.053126][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.053434][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[YkpYNHl6K2drVXpYUVREV1NmczlUS0J3aGZadVhoZzRRNlZ1MW92OW12bHZXYnh4M09adXVhNnRFcHdJcVFjTyszUHowL3lxanpDMElZb0tRcXlIZk8ybHRFaDBOU29E]
Strlen Or Ind = 0x7f4fed4810d0 -> 24720
[ODBC][32334][1613745953.053676][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.053902][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[c3JMeUtWWCsxT2J2U0FvUXc4TnBOWndLUFdnZGgrNUt4ZlpCSGIxSmF4NitFVEJoN0lEVnA0a21kMS96YlZDQktOQVZYcjRqKzdWelZRdmwxT1pBTkorWWF2cHF5UXJt]
Strlen Or Ind = 0x7f4fed4810d0 -> 24464
[ODBC][32334][1613745953.054120][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.054342][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[RnF6MmNJbkRxQ05kcHdpdHQ5ZWtDVUpUNCtYTjY0VkR5RFo1Z0gxRFplUVRRNExGRWRFRFBEWU9UeG45c2pEcmc1aGZRWXRwUDZxcXF1UzlYQm95M3owbXVUV2plbnBG]
Strlen Or Ind = 0x7f4fed4810d0 -> 24208
[ODBC][32334][1613745953.054596][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.054897][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[UUxVMG9wRXpIOG5kMTVkeW9kelhob2JIYVVBZmJvM2RYS2ZDUnNCSENWeVRmamV5akdyaHRhczV1YnJldHR1KzQwSG1zRk5yUEVob1N3SExUS3cxeFJ4WTRNeGVnajN4]
Strlen Or Ind = 0x7f4fed4810d0 -> 23952
[ it goes on and on until we have data ]
[ODBC][32334][1613745953.094878][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[MzY1c3RkQTBjRFUvYkFuTFZpSndVMFlXSE9nTi83Z29IZUUzZC9lVGFlV1RrNW8rYjR4TlBtRzJiYUUwMi9EYUtkd2Jpa08rUmFLd3E3eW9lQVZZWU1tdTcvaXY3dGV3]
Strlen Or Ind = 0x7f4fed4810d0 -> 656
[ODBC][32334][1613745953.095072][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.095271][SQLGetData.c][545]
Exit:[SQL_SUCCESS_WITH_INFO]
Buffer =
[SHhSMjRxRVc3MUVWU1g1b3FjdjVTdFRJT2FvZWlDKzlVd0I3K25iRk5BWjV1SVR4OXNlOVlJRngxb3daMHF3eEZ4dmg0TEpIRWVUQUhqaExnL0ppSkE2WlFJNnU0S3lB]
Strlen Or Ind = 0x7f4fed4810d0 -> 400
[ODBC][32334][1613745953.095459][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.095656][SQLGetData.c][545]
Exit:[SQL_SUCCESS]
Buffer =
[SHUvOG1iWTNBeFhvRTlqbVZwM0hyWGtPVEZEdFdaOXBCZjNWM2ZmYk5kSDM5MUFTYVZVa1ZRSm5yc1NONDhCTlhPenF1UWc0Rjlralcwd2ljbHU2UXpzZXhFY0xCeUU0]
Strlen Or Ind = 0x7f4fed4810d0 -> 144
[ODBC][32334][1613745953.095871][SQLGetData.c][237]
Entry:
Statement = 0x55e05fe1fd30
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 256
Target Value = 0x7f4fed48f100
StrLen Or Ind = 0x7f4fed4810d0
[ODBC][32334][1613745953.096079][SQLGetData.c][545]
Exit:[SQL_NO_DATA]
Buffer =
[SHUvOG1iWTNBeFhvRTlqbVZwM0hyWGtPVEZEdFdaOXBCZjNWM2ZmYk5kSDM5MUFTYVZVa1ZRSm5yc1NONDhCTlhPenF1UWc0Rjlralcwd2ljbHU2UXpzZXhFY0xCeUU0]
Strlen Or Ind = 0x7f4fed4810d0 -> 0
[ODBC][32334][1613745953.096325][SQLCloseCursor.c][139]
Entry:
Statement = 0x55e05fe1fd30
[ODBC][32334][1613745953.096554][SQLCloseCursor.c][234]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.096748][SQLFreeHandle.c][387]
Entry:
Handle Type = 3
Input Handle = 0x55e05fe1fd30
[ODBC][32334][1613745953.097007][SQLFreeHandle.c][490]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.097206][SQLEndTran.c][417]
Entry:
Connection = 0x55e05fc8d200
Completion Type = 1
[ODBC][32334][1613745953.098604][SQLGetInfo.c][236]
Entry:
Connection = 0x55e05fc8d200
Info Type = SQL_CURSOR_COMMIT_BEHAVIOR (23)
Info Value = 0x55e05fc8e678
Buffer Length = 2
StrLen = 0x7fff66839160
[ODBC][32334][1613745953.098859][SQLGetInfo.c][236]
Entry:
Connection = 0x55e05fc8d200
Info Type = SQL_CURSOR_ROLLBACK_BEHAVIOR (24)
Info Value = 0x55e05fc8e67a
Buffer Length = 2
StrLen = 0x7fff66839160
[ODBC][32334][1613745953.099083][SQLEndTran.c][566]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745953.099399][SQLDisconnect.c][208]
Entry:
Connection = 0x55e05fc8d200
[ODBC][32334][1613745954.023690][SQLDisconnect.c][379]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745954.024410][SQLFreeHandle.c][290]
Entry:
Handle Type = 2
Input Handle = 0x55e05fc8d200
[ODBC][32334][1613745954.024992][SQLFreeHandle.c][339]
Exit:[SQL_SUCCESS]
[ODBC][32334][1613745954.025527][SQLFreeHandle.c][220]
Entry:
Handle Type = 1
Input Handle = 0x55e05feb7150
------------------------------------------------------------------------
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=80783
--
Edit this bug report at https://bugs.php.net/bug.php?id=80783&edit=1