Bug #80783 [Ver]: PDO ODBC truncates BLOB records at every 256th byte

From: 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

« previous php.bugs (#232343) next »