From 3fede79302e751ff1a4371461031e45b987a7828 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Mon, 25 Sep 2017 12:37:10 +0530 Subject: [PATCH 1/2] MDL-58546 libraries: Upgrade adodb to v5.20.9 --- lib/adodb/adodb-active-record.inc.php | 2 +- lib/adodb/adodb-active-recordx.inc.php | 2 +- lib/adodb/adodb-csvlib.inc.php | 2 +- lib/adodb/adodb-datadict.inc.php | 2 +- lib/adodb/adodb-error.inc.php | 2 +- lib/adodb/adodb-errorhandler.inc.php | 2 +- lib/adodb/adodb-errorpear.inc.php | 2 +- lib/adodb/adodb-exceptions.inc.php | 2 +- lib/adodb/adodb-iterator.inc.php | 2 +- lib/adodb/adodb-lib.inc.php | 2 +- lib/adodb/adodb-memcache.lib.inc.php | 2 +- lib/adodb/adodb-pager.inc.php | 2 +- lib/adodb/adodb-pear.inc.php | 2 +- lib/adodb/adodb-perf.inc.php | 2 +- lib/adodb/adodb-php4.inc.php | 2 +- lib/adodb/adodb-time.inc.php | 2 +- lib/adodb/adodb.inc.php | 4 +- lib/adodb/datadict/datadict-access.inc.php | 2 +- lib/adodb/datadict/datadict-db2.inc.php | 2 +- lib/adodb/datadict/datadict-firebird.inc.php | 2 +- lib/adodb/datadict/datadict-generic.inc.php | 2 +- lib/adodb/datadict/datadict-ibase.inc.php | 2 +- lib/adodb/datadict/datadict-informix.inc.php | 2 +- lib/adodb/datadict/datadict-mssql.inc.php | 2 +- .../datadict/datadict-mssqlnative.inc.php | 74 ++++++++++++++++--- lib/adodb/datadict/datadict-mysql.inc.php | 2 +- lib/adodb/datadict/datadict-oci8.inc.php | 2 +- lib/adodb/datadict/datadict-postgres.inc.php | 2 +- lib/adodb/datadict/datadict-sapdb.inc.php | 2 +- lib/adodb/datadict/datadict-sqlite.inc.php | 2 +- lib/adodb/datadict/datadict-sybase.inc.php | 2 +- lib/adodb/drivers/adodb-access.inc.php | 2 +- lib/adodb/drivers/adodb-ado.inc.php | 2 +- lib/adodb/drivers/adodb-ado5.inc.php | 2 +- lib/adodb/drivers/adodb-ado_access.inc.php | 2 +- lib/adodb/drivers/adodb-ado_mssql.inc.php | 2 +- lib/adodb/drivers/adodb-borland_ibase.inc.php | 2 +- lib/adodb/drivers/adodb-csv.inc.php | 2 +- lib/adodb/drivers/adodb-db2.inc.php | 2 +- lib/adodb/drivers/adodb-db2oci.inc.php | 2 +- lib/adodb/drivers/adodb-db2ora.inc.php | 2 +- lib/adodb/drivers/adodb-fbsql.inc.php | 2 +- lib/adodb/drivers/adodb-firebird.inc.php | 2 +- lib/adodb/drivers/adodb-ibase.inc.php | 2 +- lib/adodb/drivers/adodb-informix.inc.php | 2 +- lib/adodb/drivers/adodb-informix72.inc.php | 2 +- lib/adodb/drivers/adodb-ldap.inc.php | 2 +- lib/adodb/drivers/adodb-mssql.inc.php | 2 +- lib/adodb/drivers/adodb-mssqlnative.inc.php | 57 +++++++------- lib/adodb/drivers/adodb-mssqlpo.inc.php | 2 +- lib/adodb/drivers/adodb-mysql.inc.php | 2 +- lib/adodb/drivers/adodb-mysqli.inc.php | 2 +- lib/adodb/drivers/adodb-mysqlpo.inc.php | 2 +- lib/adodb/drivers/adodb-mysqlt.inc.php | 2 +- lib/adodb/drivers/adodb-netezza.inc.php | 2 +- lib/adodb/drivers/adodb-oci8.inc.php | 58 ++++++++------- lib/adodb/drivers/adodb-oci805.inc.php | 2 +- lib/adodb/drivers/adodb-oci8po.inc.php | 26 ++++++- lib/adodb/drivers/adodb-oci8quercus.inc.php | 2 +- lib/adodb/drivers/adodb-odbc.inc.php | 2 +- lib/adodb/drivers/adodb-odbc_db2.inc.php | 2 +- lib/adodb/drivers/adodb-odbc_mssql.inc.php | 2 +- .../drivers/adodb-odbc_mssql2012.inc.php | 28 ------- lib/adodb/drivers/adodb-odbc_oracle.inc.php | 2 +- lib/adodb/drivers/adodb-odbtp.inc.php | 2 +- lib/adodb/drivers/adodb-odbtp_unicode.inc.php | 2 +- lib/adodb/drivers/adodb-oracle.inc.php | 2 +- lib/adodb/drivers/adodb-pdo.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_mssql.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_mysql.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_oci.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_pgsql.inc.php | 2 +- lib/adodb/drivers/adodb-pdo_sqlite.inc.php | 2 +- lib/adodb/drivers/adodb-postgres.inc.php | 2 +- lib/adodb/drivers/adodb-postgres64.inc.php | 2 +- lib/adodb/drivers/adodb-postgres7.inc.php | 2 +- lib/adodb/drivers/adodb-postgres8.inc.php | 2 +- lib/adodb/drivers/adodb-postgres9.inc.php | 2 +- lib/adodb/drivers/adodb-proxy.inc.php | 2 +- lib/adodb/drivers/adodb-sapdb.inc.php | 2 +- lib/adodb/drivers/adodb-sqlanywhere.inc.php | 2 +- lib/adodb/drivers/adodb-sqlite.inc.php | 2 +- lib/adodb/drivers/adodb-sqlite3.inc.php | 2 +- lib/adodb/drivers/adodb-sqlitepo.inc.php | 2 +- lib/adodb/drivers/adodb-sybase.inc.php | 2 +- lib/adodb/drivers/adodb-sybase_ase.inc.php | 2 +- lib/adodb/drivers/adodb-text.inc.php | 2 +- lib/adodb/drivers/adodb-vfp.inc.php | 2 +- lib/adodb/perf/perf-db2.inc.php | 2 +- lib/adodb/perf/perf-informix.inc.php | 2 +- lib/adodb/perf/perf-mssql.inc.php | 2 +- lib/adodb/perf/perf-mssqlnative.inc.php | 2 +- lib/adodb/perf/perf-mysql.inc.php | 2 +- lib/adodb/perf/perf-oci8.inc.php | 2 +- lib/adodb/perf/perf-postgres.inc.php | 2 +- lib/adodb/pivottable.inc.php | 2 +- lib/adodb/readme_moodle.txt | 9 ++- lib/adodb/rsfilter.inc.php | 2 +- lib/adodb/toexport.inc.php | 2 +- lib/adodb/tohtml.inc.php | 2 +- lib/thirdpartylibs.xml | 2 +- 101 files changed, 245 insertions(+), 199 deletions(-) delete mode 100644 lib/adodb/drivers/adodb-odbc_mssql2012.inc.php diff --git a/lib/adodb/adodb-active-record.inc.php b/lib/adodb/adodb-active-record.inc.php index ae58564ab24..a7f0adf7f78 100644 --- a/lib/adodb/adodb-active-record.inc.php +++ b/lib/adodb/adodb-active-record.inc.php @@ -1,7 +1,7 @@ RecordCount() is used. diff --git a/lib/adodb/datadict/datadict-access.inc.php b/lib/adodb/datadict/datadict-access.inc.php index 25a72a8d10f..c1459154375 100644 --- a/lib/adodb/datadict/datadict-access.inc.php +++ b/lib/adodb/datadict/datadict-access.inc.php @@ -1,7 +1,7 @@ connection->Execute( + "SELECT name FROM sys.default_constraints + WHERE object_name(parent_object_id) = '$tabname' + AND col_name(parent_object_id, parent_column_id) = '$colname'" + ); + if ( is_object($rs) ) { + $row = $rs->FetchRow(); + $constraintname = $row['name']; + } + return $constraintname; + } + + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') { $tabname = $this->TableName ($tabname); $sql = array(); - list($lines,$pkey) = $this->_GenFields($flds); - foreach($lines as $v) { - $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; - } + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + $alter = 'ALTER TABLE ' . $tabname . $this->alterCol . ' '; + foreach($lines as $v) { + $not_null = false; + if ($not_null = preg_match('/NOT NULL/i',$v)) { + $v = preg_replace('/NOT NULL/i','',$v); + } + if (preg_match('/^([^ ]+) .*DEFAULT (\'[^\']+\'|\"[^\"]+\"|[^ ]+)/',$v,$matches)) { + list(,$colname,$default) = $matches; + $v = preg_replace('/^' . preg_quote($colname) . '\s/', '', $v); + $t = trim(str_replace('DEFAULT '.$default,'',$v)); + if ( $constraintname = $this->DefaultConstraintname($tabname,$colname) ) { + $sql[] = 'ALTER TABLE '.$tabname.' DROP CONSTRAINT '. $constraintname; + } + if ($not_null) { + $sql[] = $alter . $colname . ' ' . $t . ' NOT NULL'; + } else { + $sql[] = $alter . $colname . ' ' . $t ; + } + $sql[] = 'ALTER TABLE ' . $tabname + . ' ADD CONSTRAINT DF__' . $tabname . '__' . $colname . '__' . dechex(rand()) + . ' DEFAULT ' . $default . ' FOR ' . $colname; + } else { + $colname = strtok($v," "); + if ( $constraintname = $this->DefaultConstraintname($tabname,$colname) ) { + $sql[] = 'ALTER TABLE '.$tabname.' DROP CONSTRAINT '. $constraintname; + } + if ($not_null) { + $sql[] = $alter . $v . ' NOT NULL'; + } else { + $sql[] = $alter . $v; + } + } + } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } return $sql; } - */ + /** * Drop a column, syntax is ALTER TABLE table DROP COLUMN column,column @@ -176,10 +226,12 @@ class ADODB2_mssqlnative extends ADODB_DataDict { if (!is_array($flds)) $flds = explode(',',$flds); $f = array(); - $s = 'ALTER TABLE ' . $tabname . ' DROP COLUMN '; + $s = 'ALTER TABLE ' . $tabname; foreach($flds as $v) { - //$f[] = "\n$this->dropCol ".$this->NameQuote($v); - $f[] = $this->NameQuote($v); + if ( $constraintname = $this->DefaultConstraintname($tabname,$v) ) { + $sql[] = 'ALTER TABLE ' . $tabname . ' DROP CONSTRAINT ' . $constraintname; + } + $f[] = ' DROP COLUMN ' . $this->NameQuote($v); } $s .= implode(', ',$f); $sql[] = $s; diff --git a/lib/adodb/datadict/datadict-mysql.inc.php b/lib/adodb/datadict/datadict-mysql.inc.php index 01489152a88..00a43a2a10f 100644 --- a/lib/adodb/datadict/datadict-mysql.inc.php +++ b/lib/adodb/datadict/datadict-mysql.inc.php @@ -1,7 +1,7 @@ ServerInfo(); - if (preg_match('/^09/',$data['version'])){ - /* - * SQL Server 2005 - */ - $this->mssql_version = 9; - } elseif (preg_match('/^10/',$data['version'])){ - /* - * SQL Server 2008 - */ - $this->mssql_version = 10; - } elseif (preg_match('/^11/',$data['version'])){ - /* - * SQL Server 2012 - */ - $this->mssql_version = 11; - } else + preg_match('/^\d{2}/', $data['version'], $matches); + $version = (int)reset($matches); + + // We only support SQL Server 2005 and up + if($version < 9) { die("SQL SERVER VERSION {$data['version']} NOT SUPPORTED IN mssqlnative DRIVER"); + } + + $this->mssql_version = $version; } function ServerInfo() { @@ -211,26 +209,26 @@ class ADODB_mssqlnative extends ADOConnection { switch($this->mssql_version){ case 9: case 10: - return $this->GenID2008(); + return $this->GenID2008($seq, $start); break; - case 11: - return $this->GenID2012(); + default: + return $this->GenID2012($seq, $start); break; } } function CreateSequence($seq='adodbseq',$start=1) { - if (!$this->mssql_vesion) + if (!$this->mssql_version) $this->ServerVersion(); switch($this->mssql_version){ case 9: case 10: - return $this->CreateSequence2008(); + return $this->CreateSequence2008($seq, $start); break; - case 11: - return $this->CreateSequence2012(); + default: + return $this->CreateSequence2012($seq, $start); break; } @@ -258,7 +256,7 @@ class ADODB_mssqlnative extends ADOConnection { /** * Proper Sequences Only available to Server 2012 and up */ - function CreateSequence2012($seq='adodb',$start=1){ + function CreateSequence2012($seq='adodbseq',$start=1){ if (!$this->sequences){ $sql = "SELECT name FROM sys.sequences"; $this->sequences = $this->GetCol($sql); @@ -289,7 +287,7 @@ class ADODB_mssqlnative extends ADOConnection { } $num = $this->GetOne("select id from $seq"); sqlsrv_commit($this->_connectionID); - return true; + return $num; } /** * Only available to Server 2012 and up @@ -313,7 +311,7 @@ class ADODB_mssqlnative extends ADOConnection { } if (!is_array($this->sequences) || is_array($this->sequences) && !in_array($seq,$this->sequences)){ - $this->CreateSequence2012($seq='adodbseq',$start=1); + $this->CreateSequence2012($seq, $start); } $num = $this->GetOne("SELECT NEXT VALUE FOR $seq"); @@ -468,10 +466,9 @@ class ADODB_mssqlnative extends ADOConnection { function ErrorNo() { - if ($this->_logsql && $this->_errorCode !== false) return $this->_errorCode; $err = sqlsrv_errors(SQLSRV_ERR_ALL); if($err[0]) return $err[0]['code']; - else return -1; + else return 0; } // returns true or false @@ -569,7 +566,7 @@ class ADODB_mssqlnative extends ADOConnection { $insert = false; // handle native driver flaw for retrieving the last insert ID - if(preg_match('/^\W*insert\s(?:(?:(?:\'\')*\'[^\']+\'(?:\'\')*)|[^;\'])*;?$/i', $sql)) { + if(preg_match('/^\W*insert[\s\w()",.]+values\s*\((?:[^;\']|\'\'|(?:(?:\'\')*\'[^\']+\'(?:\'\')*))*;?$/i', $sql)) { $insert = true; $sql .= '; '.$this->identitySQL; // select scope_identity() } diff --git a/lib/adodb/drivers/adodb-mssqlpo.inc.php b/lib/adodb/drivers/adodb-mssqlpo.inc.php index e99f31e3a45..cd6a2850a93 100644 --- a/lib/adodb/drivers/adodb-mssqlpo.inc.php +++ b/lib/adodb/drivers/adodb-mssqlpo.inc.php @@ -1,6 +1,6 @@ firstrows) { if ($nrows > 500 && $nrows < 1000) { @@ -731,20 +741,13 @@ END; if ($offset > 0) { $nrows += $offset; } - //$inputarr['adodb_rownum'] = $nrows; - if ($this->databaseType == 'oci8po') { - $sql = "select * from (".$sql.") where rownum <= ?"; - } else { - $sql = "select * from (".$sql.") where rownum <= :adodb_offset"; - } + $sql = "select * from (".$sql.") where rownum <= :adodb_offset"; $inputarr['adodb_offset'] = $nrows; $nrows = -1; } // note that $nrows = 0 still has to work ==> no rows returned - $rs = ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); - return $rs; - + return ADOConnection::SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); } else { // Algorithm by Tomas V V Cox, from PEAR DB oci8.php @@ -758,13 +761,19 @@ END; if (is_array($inputarr)) { foreach($inputarr as $k => $v) { + $i=0; + if ($this->databaseType == 'oci8po') { + $bv_name = ":".$i++; + } else { + $bv_name = ":".$k; + } if (is_array($v)) { // suggested by g.giunta@libero. if (sizeof($v) == 2) { - oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1]); + oci_bind_by_name($stmt,$bv_name,$inputarr[$k][0],$v[1]); } else { - oci_bind_by_name($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); + oci_bind_by_name($stmt,$bv_name,$inputarr[$k][0],$v[1],$v[2]); } } else { $len = -1; @@ -774,7 +783,7 @@ END; if (isset($bindarr)) { // is prepared sql, so no need to oci_bind_by_name again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time - oci_bind_by_name($stmt,":$k",$inputarr[$k],$len); + oci_bind_by_name($stmt,$bv_name,$inputarr[$k],$len); } } } @@ -801,24 +810,19 @@ END; } $offset += 1; // in Oracle rownum starts at 1 - if ($this->databaseType == 'oci8po') { - $sql = "SELECT $hint $fields FROM". - "(SELECT rownum as adodb_rownum, $fields FROM". - " ($sql) WHERE rownum <= ?". - ") WHERE adodb_rownum >= ?"; - } else { - $sql = "SELECT $hint $fields FROM". - "(SELECT rownum as adodb_rownum, $fields FROM". - " ($sql) WHERE rownum <= :adodb_nrows". - ") WHERE adodb_rownum >= :adodb_offset"; - } - $inputarr['adodb_nrows'] = $nrows; - $inputarr['adodb_offset'] = $offset; + $sql = "SELECT $hint $fields FROM". + "(SELECT rownum as adodb_rownum, $fields FROM". + " ($sql) WHERE rownum <= :adodb_nrows". + ") WHERE adodb_rownum >= :adodb_offset"; + $inputarr['adodb_nrows'] = $nrows; + $inputarr['adodb_offset'] = $offset; if ($secs2cache > 0) { $rs = $this->CacheExecute($secs2cache, $sql,$inputarr); } - else $rs = $this->Execute($sql,$inputarr); + else { + $rs = $this->Execute($sql, $inputarr); + } return $rs; } } diff --git a/lib/adodb/drivers/adodb-oci805.inc.php b/lib/adodb/drivers/adodb-oci805.inc.php index e2979f5bf3a..112e9eccdbc 100644 --- a/lib/adodb/drivers/adodb-oci805.inc.php +++ b/lib/adodb/drivers/adodb-oci805.inc.php @@ -1,6 +1,6 @@ 1) { + $sql = $sqlarr[0]; - foreach($inputarr as $k => $v) { - $sql .= ":$k" . $sqlarr[++$i]; + foreach ($inputarr as $k => $v) { + $sql .= ":$k" . $sqlarr[++$i]; + } } $sql = str_replace('-QUESTIONMARK-', '?', $sql); diff --git a/lib/adodb/drivers/adodb-oci8quercus.inc.php b/lib/adodb/drivers/adodb-oci8quercus.inc.php index 341e2fc6e74..1940e802e3c 100644 --- a/lib/adodb/drivers/adodb-oci8quercus.inc.php +++ b/lib/adodb/drivers/adodb-oci8quercus.inc.php @@ -1,6 +1,6 @@ license.txt + Added: * index.html - prevent directory browsing on misconfigured servers * readme_moodle.txt - this file ;-) @@ -26,6 +29,6 @@ Added: Our changes: * Removed random seed initialization from lib/adodb/adodb.inc.php:216 (see 038f546 and MDL-41198). * MDL-52286 Added muting erros in ADORecordSet::__destruct(). - Check if fixed upstream during the next upgrade and remove this note. + Check if fixed upstream during the next upgrade and remove this note. (8638b3f1441d4b928) -skodak, iarenaza, moodler, stronk7, abgreeve, lameze +skodak, iarenaza, moodler, stronk7, abgreeve, lameze, ankitagarwal diff --git a/lib/adodb/rsfilter.inc.php b/lib/adodb/rsfilter.inc.php index 33439835bcb..4b609b98bf9 100644 --- a/lib/adodb/rsfilter.inc.php +++ b/lib/adodb/rsfilter.inc.php @@ -1,6 +1,6 @@ adodb AdoDB BSD/GPL - 5.20.7 + 5.20.9 2.1+ From acfb9df1a8571277fad4f719ff90442da310f958 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 3 Oct 2017 15:52:18 +0800 Subject: [PATCH 2/2] MDL-58546 libraries: Patch ADOdb for PHP 7.2 compat --- lib/adodb/adodb-datadict.inc.php | 2 +- lib/adodb/adodb-error.inc.php | 2 +- lib/adodb/adodb.inc.php | 3 +-- lib/adodb/drivers/adodb-ado.inc.php | 2 +- lib/adodb/drivers/adodb-ado5.inc.php | 2 +- lib/adodb/drivers/adodb-text.inc.php | 6 +++--- lib/adodb/readme_moodle.txt | 4 +++- lib/adodb/toexport.inc.php | 2 +- 8 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/adodb/adodb-datadict.inc.php b/lib/adodb/adodb-datadict.inc.php index b15a80e667b..b2a0837d375 100644 --- a/lib/adodb/adodb-datadict.inc.php +++ b/lib/adodb/adodb-datadict.inc.php @@ -520,7 +520,7 @@ class ADODB_DataDict { list($lines,$pkey,$idxs) = $this->_GenFields($flds); // genfields can return FALSE at times if ($lines == null) $lines = array(); - list(,$first) = each($lines); + $first = current($lines); list(,$column_def) = preg_split("/[\t ]+/",$first,2); } return array(sprintf($this->renameColumn,$tabname,$this->NameQuote($oldcolumn),$this->NameQuote($newcolumn),$column_def)); diff --git a/lib/adodb/adodb-error.inc.php b/lib/adodb/adodb-error.inc.php index d42a06a83d3..18f944b7029 100644 --- a/lib/adodb/adodb-error.inc.php +++ b/lib/adodb/adodb-error.inc.php @@ -111,7 +111,7 @@ function adodb_error_pg($errormsg) 'could not serialize access due to' => DB_ERROR_SERIALIZATION_FAILURE ); reset($error_regexps); - while (list($regexp,$code) = each($error_regexps)) { + foreach ($error_regexps as $regexp => $code) { if (preg_match("/$regexp/mi", $errormsg)) { return $code; } diff --git a/lib/adodb/adodb.inc.php b/lib/adodb/adodb.inc.php index 019cdda9f94..b01b0af8d7b 100644 --- a/lib/adodb/adodb.inc.php +++ b/lib/adodb/adodb.inc.php @@ -1164,8 +1164,7 @@ if (!defined('_ADODB_LAYER')) { foreach($inputarr as $arr) { $sql = ''; $i = 0; - //Use each() instead of foreach to reduce memory usage -mikefedyk - while(list(, $v) = each($arr)) { + foreach ($arr as $v) { $sql .= $sqlarr[$i]; // from Ron Baldwin // Only quote string types diff --git a/lib/adodb/drivers/adodb-ado.inc.php b/lib/adodb/drivers/adodb-ado.inc.php index 449cdd0053b..04b7dc85152 100644 --- a/lib/adodb/drivers/adodb-ado.inc.php +++ b/lib/adodb/drivers/adodb-ado.inc.php @@ -225,7 +225,7 @@ class ADODB_ado extends ADOConnection { // Map by http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcreateparam.asp // Check issue http://bugs.php.net/bug.php?id=40664 !!! - while(list(, $val) = each($inputarr)) { + foreach ($inputarr as $val) { $type = gettype($val); $len=strlen($val); if ($type == 'boolean') diff --git a/lib/adodb/drivers/adodb-ado5.inc.php b/lib/adodb/drivers/adodb-ado5.inc.php index 21df32f1603..73c4b508e0d 100644 --- a/lib/adodb/drivers/adodb-ado5.inc.php +++ b/lib/adodb/drivers/adodb-ado5.inc.php @@ -248,7 +248,7 @@ class ADODB_ado extends ADOConnection { $oCmd->CommandText = $sql; $oCmd->CommandType = 1; - while(list(, $val) = each($inputarr)) { + foreach ($inputarr as $val) { $type = gettype($val); $len=strlen($val); if ($type == 'boolean') diff --git a/lib/adodb/drivers/adodb-text.inc.php b/lib/adodb/drivers/adodb-text.inc.php index 347167a7540..8844d20e14f 100644 --- a/lib/adodb/drivers/adodb-text.inc.php +++ b/lib/adodb/drivers/adodb-text.inc.php @@ -209,7 +209,7 @@ class ADODB_text extends ADOConnection { $where_arr = array(); reset($this->_origarray); - while (list($k_arr,$arr) = each($this->_origarray)) { + foreach ($this->_origarray as $arr) { if ($i == 0 && $this->_skiprow1) $where_arr[] = $arr; @@ -247,7 +247,7 @@ class ADODB_text extends ADOConnection { $i = 0; $n = ''; reset($this->_colnames); - while (list($k_n,$n) = each($this->_colnames)) { + foreach ($this->_colnames as $n) { if ($col == strtoupper(trim($n))) break; $i += 1; @@ -302,7 +302,7 @@ class ADODB_text extends ADOConnection { if ($at == 0) { $i = 0; reset($projnames); - while (list($k_n,$n) = each($projnames)) { + foreach ($projnames as $n) { if (strtoupper(trim($n)) == $col) { $at = $i+1; break; diff --git a/lib/adodb/readme_moodle.txt b/lib/adodb/readme_moodle.txt index 22c59352596..00ff24052c0 100644 --- a/lib/adodb/readme_moodle.txt +++ b/lib/adodb/readme_moodle.txt @@ -30,5 +30,7 @@ Our changes: * Removed random seed initialization from lib/adodb/adodb.inc.php:216 (see 038f546 and MDL-41198). * MDL-52286 Added muting erros in ADORecordSet::__destruct(). Check if fixed upstream during the next upgrade and remove this note. (8638b3f1441d4b928) + * MDL-58546 replaced each() with foreach for PHP 7.2 compatibility. + pull request upstream: https://github.com/ADOdb/ADOdb/pull/373 -skodak, iarenaza, moodler, stronk7, abgreeve, lameze, ankitagarwal +skodak, iarenaza, moodler, stronk7, abgreeve, lameze, ankitagarwal, marinaglancy diff --git a/lib/adodb/toexport.inc.php b/lib/adodb/toexport.inc.php index 94c394b8eed..6e3d491a593 100644 --- a/lib/adodb/toexport.inc.php +++ b/lib/adodb/toexport.inc.php @@ -77,7 +77,7 @@ function _adodb_export(&$rs,$sep,$sepreplace,$fp=false,$addtitles=true,$quote = reset($fieldTypes); $i = 0; $elements = array(); - while(list(,$o) = each($fieldTypes)) { + foreach ($fieldTypes as $o) { $v = ($o) ? $o->name : 'Field'.($i++); if ($escquote) $v = str_replace($quote,$escquotequote,$v);