Skip to content

ext/pdo_firebird: Fix DPB stack overflow on long connection parameters - #25292

Closed
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/aph-pdo-firebird-dpb-overflow-x63u-84-work
Closed

iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/aph-pdo-firebird-dpb-overflow-x63u-84-work

Conversation

@iliaal

@iliaal iliaal commented Nov 7, 2026

Copy link
Copy Markdown
Member

When the user name, password, charset, and role of a Firebird connection add up to more than the 256-byte DPB buffer, the connection factory writes one byte past it, and a single value over 255 bytes is also sent with a truncated length byte. Reject such values with a PDOException before writing them.

if (dpb_values[i]) {
dpb_value_len = strlen(dpb_values[i]);
if (dpb_value_len + 2 >= buf_len) {
zend_throw_exception_ex(php_pdo_get_exception(), 0,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it is possible to indicate which argument is too long

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, it now names the parameter.

slprintf() stores its terminating NUL within the size it is given, and the
DPB is written from offset 1 of a 256-byte buffer with a size of 256, so a
user name, password, charset, or role that filled the buffer wrote one byte
past its end. A value longer than 255 bytes also had its one-byte length
truncated. Reject such values with a PDOException before writing them.
@iliaal
iliaal force-pushed the fix/aph-pdo-firebird-dpb-overflow-x63u-84-work branch from e00aab5 to 874a179 Compare November 8, 2026 14:42
@iliaal iliaal closed this in ffe75c9 Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants