Fix some PHPStan erros in Util.php

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
Maurício Meneghini Fauth 2020-07-03 20:40:57 -03:00
parent b41e17124b
commit 337585249b
3 changed files with 47 additions and 85 deletions

View File

@ -50,6 +50,7 @@ use function htmlspecialchars_decode;
use function implode;
use function in_array;
use function is_array;
use function is_callable;
use function is_object;
use function is_string;
use function log10;
@ -815,12 +816,12 @@ class Util
$timestamp = time();
}
$date = preg_replace(
$date = (string) preg_replace(
'@%[aA]@',
$day_of_week[(int) strftime('%w', (int) $timestamp)],
$format
);
$date = preg_replace(
$date = (string) preg_replace(
'@%[bB]@',
$month[(int) strftime('%m', (int) $timestamp) - 1],
$date
@ -833,14 +834,17 @@ class Util
} else {
$am_pm = _pgettext('AM/PM indication in time', 'AM');
}
$date = preg_replace('@%[pP]@', $am_pm, $date);
$date = (string) preg_replace('@%[pP]@', $am_pm, $date);
// Can return false on windows for Japanese language
// See https://github.com/phpmyadmin/phpmyadmin/issues/15830
$ret = strftime($date, (int) $timestamp);
// Some OSes such as Win8.1 Traditional Chinese version did not produce UTF-8
// output here. See https://github.com/phpmyadmin/phpmyadmin/issues/10598
if ($ret === false || mb_detect_encoding($ret, 'UTF-8', true) != 'UTF-8') {
/** @phpstan-ignore-next-line */
if ($ret === false
|| mb_detect_encoding($ret, 'UTF-8', true) !== 'UTF-8'
) {
$ret = date('Y-m-d H:i:s', (int) $timestamp);
}
@ -852,9 +856,9 @@ class Util
*
* @param string $url the URL
*
* @return array the parameter/value pairs, for example [0] db=sakila
* @return array<int, string> the parameter/value pairs, for example [0] db=sakila
*/
public static function splitURLQuery($url)
public static function splitURLQuery($url): array
{
// decode encoded url separators
$separator = Url::getArgSeparator();
@ -869,8 +873,10 @@ class Util
$url_parts = parse_url($url);
if (is_array($url_parts) && ! empty($url_parts['query'])) {
return explode($separator, $url_parts['query']);
if (is_array($url_parts) && isset($url_parts['query'])) {
$array = explode($separator, $url_parts['query']);
return is_array($array) ? $array : [];
}
return [];
@ -1110,7 +1116,7 @@ class Util
$condition = ' ' . $con_key . ' ';
[$con_val, $condition] = self::getConditionValue(
! isset($row[$i]) || $row[$i] === null ? null : $row[$i],
$row[$i] ?? null,
$meta,
$GLOBALS['dbi']->fieldFlags($handle, $i),
$fields_cnt,
@ -1153,7 +1159,7 @@ class Util
$clause_is_unique = false;
}
$where_clause = trim(preg_replace('|\s?AND$|', '', $preferred_condition));
$where_clause = trim((string) preg_replace('|\s?AND$|', '', $preferred_condition));
return [
$where_clause,
@ -1562,7 +1568,7 @@ class Util
$binary = false;
}
$printtype = preg_replace(
$printtype = (string) preg_replace(
'@zerofill@',
'',
$printtype,
@ -1570,7 +1576,7 @@ class Util
$zerofill_cnt
);
$zerofill = ($zerofill_cnt > 0);
$printtype = preg_replace(
$printtype = (string) preg_replace(
'@unsigned@',
'',
$printtype,
@ -1916,10 +1922,10 @@ class Util
foreach ($replace as $key => $val) {
if (isset($escape_class, $escape_method)) {
$replace[$key] = $escape_class->$escape_method($val);
} else {
$replace[$key] = $escape == 'backquote'
? self::$escape($val)
: $escape($val);
} elseif ($escape === 'backquote') {
$replace[$key] = self::backquote($val);
} elseif (is_callable($escape)) {
$replace[$key] = $escape($val);
}
}
}
@ -3022,7 +3028,7 @@ class Util
while (strlen($result) < $length) {
// Get random byte and strip highest bit
// to get ASCII only range
$byte = ord($random_func(1)) & 0x7f;
$byte = ord((string) $random_func(1)) & 0x7f;
// We want only ASCII chars
if ($byte <= 32) {
continue;

View File

@ -3320,56 +3320,11 @@ parameters:
count: 1
path: libraries/classes/Types.php
-
message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, string\\|null given\\.$#"
count: 3
path: libraries/classes/Util.php
-
message: "#^Parameter \\#1 \\$format of function strftime expects string, string\\|null given\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Strict comparison using \\=\\=\\= between string and false will always evaluate to false\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Method PhpMyAdmin\\\\Util\\:\\:splitURLQuery\\(\\) should return array but returns array\\<int, string\\>\\|false\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Offset 'query' does not exist on array\\(\\?'scheme' \\=\\> string, \\?'host' \\=\\> string, \\?'port' \\=\\> int, \\?'user' \\=\\> string, \\?'pass' \\=\\> string, \\?'path' \\=\\> string, \\?'query' \\=\\> string, \\?'fragment' \\=\\> string\\)\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Strict comparison using \\=\\=\\= between mixed and null will always evaluate to false\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Parameter \\#1 \\$str of function trim expects string, string\\|null given\\.$#"
count: 2
path: libraries/classes/Util.php
-
message: "#^Trying to invoke array\\|string but it might not be a callable\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Parameter \\#1 \\$array_arg of function reset expects array, array\\|object given\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Parameter \\#1 \\$character of function ord expects string, string\\|false given\\.$#"
count: 1
path: libraries/classes/Util.php
-
message: "#^Property PhpMyAdmin\\\\Utils\\\\HttpRequest\\:\\:\\$proxyUrl has no typehint specified\\.$#"
count: 1

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="3.12.1@9b860214d58c48b5cbe99bdb17914d0eb723c9cd">
<files psalm-version="3.12.2@7c7ebd068f8acaba211d4a2c707c4ba90874fa26">
<file src="libraries/classes/Advisor.php">
<PossiblyNullArgument occurrences="1">
<code>Util::formatByteDown($value, $limes, $comma)</code>
@ -435,7 +435,9 @@
<InvalidArgument occurrences="1">
<code>$insert_errors</code>
</InvalidArgument>
<PossiblyNullArgument occurrences="5">
<PossiblyNullArgument occurrences="7">
<code>$current_value</code>
<code>$current_value</code>
<code>$multi_edit_columns_null</code>
<code>$multi_edit_columns_null_prev</code>
<code>$multi_edit_funcs</code>
@ -747,14 +749,12 @@
<NullableReturnStatement occurrences="1">
<code>$this-&gt;__get('sql_query')</code>
</NullableReturnStatement>
<PossiblyInvalidArgument occurrences="5">
<PossiblyInvalidArgument occurrences="3">
<code>$col_visib</code>
<code>$col_visib</code>
<code>$sortExpressionNoDirection</code>
<code>$transform_options</code>
<code>$transform_options</code>
</PossiblyInvalidArgument>
<PossiblyNullArgument occurrences="57">
<PossiblyNullArgument occurrences="56">
<code>$this-&gt;__get('sql_query')</code>
<code>$db</code>
<code>$table</code>
@ -775,7 +775,6 @@
<code>empty($field-&gt;database) ? $this-&gt;__get('db') : $field-&gt;database</code>
<code>$this-&gt;__get('table')</code>
<code>$this-&gt;__get('db')</code>
<code>$display_params</code>
<code>$this-&gt;__get('fields_cnt')</code>
<code>$this-&gt;__get('fields_meta')</code>
<code>$this-&gt;__get('table')</code>
@ -813,7 +812,7 @@
<code>$this-&gt;__get('fields_cnt')</code>
<code>$this-&gt;__get('fields_meta')</code>
</PossiblyNullArgument>
<PossiblyNullArrayAccess occurrences="32">
<PossiblyNullArrayAccess occurrences="27">
<code>$fields_meta[$i]</code>
<code>$fields_meta[$i]</code>
<code>$fields_meta[$i]</code>
@ -835,11 +834,6 @@
<code>$display_params['data']</code>
<code>$display_params['data']</code>
<code>$display_params['data']</code>
<code>$display_params['data']</code>
<code>$display_params['rowdata']</code>
<code>$display_params['data']</code>
<code>$display_params['data']</code>
<code>$display_params['rowdata']</code>
<code>$fields_meta[$m]</code>
<code>$fields_meta[0]</code>
<code>$fields_meta[1]</code>
@ -847,7 +841,17 @@
<code>$display_size[0]</code>
<code>$display_size[1]</code>
</PossiblyNullArrayAccess>
<PossiblyNullArrayOffset occurrences="1">
<PossiblyNullArrayAssignment occurrences="7">
<code>$display_params['desc']</code>
<code>$display_params['desc']</code>
<code>$whereClauseMap[$row_no]</code>
<code>$whereClauseMap[$row_no]</code>
<code>$display_params['data']</code>
<code>$display_params['data']</code>
<code>$display_params['data']</code>
</PossiblyNullArrayAssignment>
<PossiblyNullArrayOffset occurrences="2">
<code>$whereClauseMap[$row_no]</code>
<code>$map</code>
</PossiblyNullArrayOffset>
<PossiblyNullIterator occurrences="2">
@ -1123,9 +1127,6 @@
</PossiblyNullPropertyAssignmentValue>
</file>
<file src="libraries/classes/Git.php">
<InvalidArgument occurrences="1">
<code>$user</code>
</InvalidArgument>
<ParadoxicalCondition occurrences="1">
<code>null</code>
</ParadoxicalCondition>
@ -1873,7 +1874,8 @@
<code>$com_rs</code>
<code>$com_rs</code>
</InvalidArgument>
<InvalidReturnStatement occurrences="2">
<InvalidReturnStatement occurrences="3">
<code>$cfgRelation</code>
<code>$this-&gt;queryAsControlUser($upd_query)</code>
<code>$this-&gt;dbi-&gt;insertId(DatabaseInterface::CONNECT_CONTROL)</code>
</InvalidReturnStatement>
@ -2274,17 +2276,16 @@
<EmptyArrayAccess occurrences="1">
<code>$group[$group_name]['tab' . $sep . 'count']</code>
</EmptyArrayAccess>
<InvalidArrayOffset occurrences="2">
<InvalidArrayOffset occurrences="3">
<code>$group[$group_name]['is' . $sep . 'group']</code>
<code>$group[$group_name]['tab' . $sep . 'count']</code>
<code>$units[$d]</code>
</InvalidArrayOffset>
<InvalidReturnStatement occurrences="2">
<InvalidReturnStatement occurrences="1">
<code>$return_value</code>
<code>$gis_data_types</code>
</InvalidReturnStatement>
<InvalidReturnType occurrences="2">
<InvalidReturnType occurrences="1">
<code>int</code>
<code>string[]</code>
</InvalidReturnType>
<InvalidScalarArgument occurrences="1">
<code>$value</code>