From 5a096aede73c529e06de36978798d5530c98872d Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Wed, 16 Jul 2025 09:00:19 +0200 Subject: [PATCH 1/2] PDO: Migrate maxlen of pdo_column_data from size_t to zend_long --- ext/pdo/pdo_stmt.c | 2 +- ext/pdo/php_pdo_driver.h | 2 +- ext/pdo_sqlite/sqlite_statement.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 697940d94260d..d7dfab4e24432 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1590,7 +1590,7 @@ PHP_METHOD(PDOStatement, getColumnMeta) /* add stock items */ col = &stmt->columns[colno]; add_assoc_str(return_value, "name", zend_string_copy(col->name)); - add_assoc_long(return_value, "len", col->maxlen); /* FIXME: unsigned ? */ + add_assoc_long(return_value, "len", col->maxlen); add_assoc_long(return_value, "precision", col->precision); } /* }}} */ diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h index 9c5986ff8bce8..c5f24373390be 100644 --- a/ext/pdo/php_pdo_driver.h +++ b/ext/pdo/php_pdo_driver.h @@ -533,7 +533,7 @@ static inline pdo_dbh_object_t *php_pdo_dbh_fetch_object(zend_object *obj) { /* describes a column */ struct pdo_column_data { zend_string *name; - size_t maxlen; + zend_long maxlen; zend_ulong precision; }; diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index e9e7a0cc78609..fab19d14bd0d2 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -251,7 +251,7 @@ static int pdo_sqlite_stmt_describe(pdo_stmt_t *stmt, int colno) str = sqlite3_column_name(S->stmt, colno); stmt->columns[colno].name = zend_string_init(str, strlen(str), 0); - stmt->columns[colno].maxlen = SIZE_MAX; + stmt->columns[colno].maxlen = -1; stmt->columns[colno].precision = 0; return 1; From 5dce462affe7885f0cbbee4d8c11ef2f68ba81dc Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Fri, 29 Aug 2025 09:27:39 +0200 Subject: [PATCH 2/2] PDO_ODBC: use displaysize for maxlen and colsize for datalen --- ext/pdo_odbc/odbc_stmt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c index 1f5009c746b61..b1ffe801a529e 100644 --- a/ext/pdo_odbc/odbc_stmt.c +++ b/ext/pdo_odbc/odbc_stmt.c @@ -608,7 +608,8 @@ static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno) } colsize = displaysize; - col->maxlen = S->cols[colno].datalen = colsize; + S->cols[colno].datalen = colsize; + col->maxlen = displaysize; col->name = zend_string_init(S->cols[colno].colname, colnamelen, 0); S->cols[colno].is_unicode = pdo_odbc_sqltype_is_unicode(S, S->cols[colno].coltype);