From e4de62d35b0f140c832e0e6ebda5a5d194af1340 Mon Sep 17 00:00:00 2001 From: Mark Newnham Date: Wed, 18 Feb 2026 19:25:23 -0700 Subject: Validates table name in MetaIndexes to allow for correct return values --- drivers/adodb-mssqlnative.inc.php | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/adodb-mssqlnative.inc.php b/drivers/adodb-mssqlnative.inc.php index c98c34a4..82a4dacd 100644 --- a/drivers/adodb-mssqlnative.inc.php +++ b/drivers/adodb-mssqlnative.inc.php @@ -726,8 +726,26 @@ class ADODB_mssqlnative extends ADOConnection { } + /** + * List indexes on a table as an array + * + * @param string $table table name to query + * @param bool $primary true to only show primary keys. Not actually used for most databases + * @param string $owner Discarded for this driver + * + * @return array of indexes on current table + */ function MetaIndexes($table,$primary=false, $owner = false) { + + global $ADODB_FETCH_MODE; + + $metaTables = $this->metaTables('T',$owner,$table); + + if (!$metaTables) { + return false; + } + $table = $this->qstr($table); $sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, @@ -739,7 +757,7 @@ class ADODB_mssqlnative extends ADOConnection { WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table ORDER BY O.name, I.Name, K.keyno"; - global $ADODB_FETCH_MODE; + $save = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if ($this->fetchMode !== FALSE) { @@ -758,11 +776,18 @@ class ADODB_mssqlnative extends ADOConnection { $indexes = array(); while ($row = $rs->FetchRow()) { - if (!$primary && $row[5]) continue; + if (!$primary && $row[5]) { + continue; + } $indexes[$row[0]]['unique'] = $row[6]; $indexes[$row[0]]['columns'][] = $row[1]; } + + if (count($indexes) == 0) { + return false; + } + return $indexes; } @@ -887,6 +912,7 @@ class ADODB_mssqlnative extends ADOConnection { } return $ret; } + function MetaColumns($table, $upper=true, $schema=false){ /* -- cgit v1.3