Skip to content

Fix GH-22668: odbc heap over-read on oversized column value#147

Closed
iliaal wants to merge 1 commit into
PHP-8.4from
fix/gh-22668-odbc-vallen-clamp
Closed

Fix GH-22668: odbc heap over-read on oversized column value#147
iliaal wants to merge 1 commit into
PHP-8.4from
fix/gh-22668-odbc-vallen-clamp

Conversation

@iliaal

@iliaal iliaal commented Jul 10, 2026

Copy link
Copy Markdown
Owner

ext/odbc builds the result string from the driver-reported vallen, which on truncation exceeds the bound displaysize+1 buffer (SQL_SUCCESS_WITH_INFO), over-reading heap into the returned value. Clamps the length to the bound capacity at the three fetch sites. Reproduces with the SQLite3 ODBC driver; the test skips without it.

ext/odbc bound a displaysize+1 buffer per column but built the result
string from the driver-reported vallen. A conforming driver truncates an
over-long value into the buffer yet reports the full length, so the fetch
over-read past the allocation and returned adjacent heap bytes to userland.
Store the bound capacity in odbc_result_value and clamp the string length to
it at the three bound-buffer fetch sites (odbc_fetch_array/object,
odbc_fetch_into, odbc_result); the SQLGetData long-column paths stay bounded
by longreadlen.

Fixes phpGH-22668
@iliaal

iliaal commented Jul 10, 2026

Copy link
Copy Markdown
Owner Author

Submitted upstream as php#22670.

@iliaal iliaal closed this Jul 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant