diff --git a/libraries/classes/Plugins/Export/ExportCsv.php b/libraries/classes/Plugins/Export/ExportCsv.php index 79882bb5e0..ae1ef4c09b 100644 --- a/libraries/classes/Plugins/Export/ExportCsv.php +++ b/libraries/classes/Plugins/Export/ExportCsv.php @@ -17,6 +17,7 @@ use PhpMyAdmin\Properties\Options\Items\TextPropertyItem; use PhpMyAdmin\Properties\Plugins\ExportPluginProperties; use function __; +use function bin2hex; use function mb_strtolower; use function mb_substr; use function preg_replace; @@ -220,6 +221,7 @@ class ExportCsv extends ExportPlugin // Gets the data from the database $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $fields_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); // If required, get fields name at the first line if (isset($GLOBALS['csv_columns']) && $GLOBALS['csv_columns']) { @@ -254,6 +256,10 @@ class ExportCsv extends ExportPlugin if (! isset($row[$j])) { $schema_insert .= $GLOBALS[$what . '_null']; } elseif ($row[$j] == '0' || $row[$j] != '') { + if ($fieldsMeta[$j]->isMappedTypeGeometry || $fieldsMeta[$j]->isBinary) { + $row[$j] = '0x' . bin2hex($row[$j]); + } + // always enclose fields if ($what === 'excel') { $row[$j] = preg_replace("/\015(\012)?/", "\012", $row[$j]); diff --git a/libraries/classes/Plugins/Export/ExportLatex.php b/libraries/classes/Plugins/Export/ExportLatex.php index 86167d7893..60c49adfd6 100644 --- a/libraries/classes/Plugins/Export/ExportLatex.php +++ b/libraries/classes/Plugins/Export/ExportLatex.php @@ -19,6 +19,7 @@ use PhpMyAdmin\Util; use PhpMyAdmin\Version; use function __; +use function bin2hex; use function count; use function in_array; use function mb_strpos; @@ -298,6 +299,7 @@ class ExportLatex extends ExportPlugin $result = $dbi->tryQuery($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $columns_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); $columns = []; $columns_alias = []; foreach ($result->getFieldNames() as $i => $col_as) { @@ -398,9 +400,15 @@ class ExportLatex extends ExportPlugin // print each row for ($i = 0; $i < $columns_cnt; $i++) { if ($record[$columns[$i]] !== null && isset($record[$columns[$i]])) { - $column_value = self::texEscape( - stripslashes($record[$columns[$i]]) - ); + if ($fieldsMeta[$i]->isMappedTypeGeometry || $fieldsMeta[$i]->isBinary) { + $column_value = self::texEscape( + '0x' . bin2hex($record[$columns[$i]]) + ); + } else { + $column_value = self::texEscape( + stripslashes($record[$columns[$i]]) + ); + } } else { $column_value = $GLOBALS['latex_null']; } diff --git a/libraries/classes/Plugins/Export/ExportMediawiki.php b/libraries/classes/Plugins/Export/ExportMediawiki.php index 1e990cc7cf..a7a726254c 100644 --- a/libraries/classes/Plugins/Export/ExportMediawiki.php +++ b/libraries/classes/Plugins/Export/ExportMediawiki.php @@ -19,6 +19,7 @@ use PhpMyAdmin\Util; use function __; use function array_values; +use function bin2hex; use function count; use function htmlspecialchars; use function str_repeat; @@ -317,12 +318,19 @@ class ExportMediawiki extends ExportPlugin // Get the table data from the database $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $fields_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); while ($row = $result->fetchRow()) { $output .= '|-' . $this->exportCRLF(); // Use '|' for separating table columns for ($i = 0; $i < $fields_cnt; ++$i) { + if (! isset($row[$i])) { + $row[$i] = 'NULL'; + } elseif ($fieldsMeta[$i]->isMappedTypeGeometry || $fieldsMeta[$i]->isBinary) { + $row[$i] = '0x' . bin2hex($row[$i]); + } + $output .= ' | ' . $row[$i] . '' . $this->exportCRLF(); } } diff --git a/libraries/classes/Plugins/Export/ExportPhparray.php b/libraries/classes/Plugins/Export/ExportPhparray.php index a244cc6b30..caf6efb11f 100644 --- a/libraries/classes/Plugins/Export/ExportPhparray.php +++ b/libraries/classes/Plugins/Export/ExportPhparray.php @@ -17,6 +17,7 @@ use PhpMyAdmin\Util; use PhpMyAdmin\Version; use function __; +use function bin2hex; use function preg_match; use function preg_replace; use function stripslashes; @@ -169,6 +170,7 @@ class ExportPhparray extends ExportPlugin $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $columns_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); $columns = []; foreach ($result->getFieldNames() as $i => $col_as) { if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { @@ -216,6 +218,10 @@ class ExportPhparray extends ExportPlugin } for ($i = 0; $i < $columns_cnt; $i++) { + if ($record[$i] !== null && ($fieldsMeta[$i]->isMappedTypeGeometry || $fieldsMeta[$i]->isBinary)) { + $record[$i] = '0x' . bin2hex($record[$i]); + } + $buffer .= var_export($columns[$i], true) . ' => ' . var_export($record[$i], true) . ($i + 1 >= $columns_cnt ? '' : ','); diff --git a/libraries/classes/Plugins/Export/ExportTexytext.php b/libraries/classes/Plugins/Export/ExportTexytext.php index de9d358494..31c4c3772d 100644 --- a/libraries/classes/Plugins/Export/ExportTexytext.php +++ b/libraries/classes/Plugins/Export/ExportTexytext.php @@ -18,6 +18,7 @@ use PhpMyAdmin\Properties\Plugins\ExportPluginProperties; use PhpMyAdmin\Util; use function __; +use function bin2hex; use function htmlspecialchars; use function in_array; use function str_replace; @@ -185,6 +186,7 @@ class ExportTexytext extends ExportPlugin // Gets the data from the database $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $fields_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); // If required, get fields name at the first line if (isset($GLOBALS[$what . '_columns'])) { @@ -212,6 +214,10 @@ class ExportTexytext extends ExportPlugin $value = $GLOBALS[$what . '_null']; } elseif ($row[$j] == '0' || $row[$j] != '') { $value = $row[$j]; + + if ($fieldsMeta[$j]->isMappedTypeGeometry || $fieldsMeta[$j]->isBinary) { + $value = '0x' . bin2hex($value); + } } else { $value = ' '; } diff --git a/libraries/classes/Plugins/Export/ExportXml.php b/libraries/classes/Plugins/Export/ExportXml.php index f8dc1034c4..74a33185ef 100644 --- a/libraries/classes/Plugins/Export/ExportXml.php +++ b/libraries/classes/Plugins/Export/ExportXml.php @@ -15,6 +15,7 @@ use PhpMyAdmin\Util; use PhpMyAdmin\Version; use function __; +use function bin2hex; use function count; use function htmlspecialchars; use function is_array; @@ -463,6 +464,7 @@ class ExportXml extends ExportPlugin $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); $columns_cnt = $result->numFields(); + $fieldsMeta = $dbi->getFieldsMeta($result); $columns = []; foreach ($result->getFieldNames() as $column) { $columns[] = stripslashes($column); @@ -487,6 +489,8 @@ class ExportXml extends ExportPlugin // the XML structure if (! isset($record[$i])) { $record[$i] = 'NULL'; + } elseif ($fieldsMeta[$i]->isMappedTypeGeometry || $fieldsMeta[$i]->isBinary) { + $record[$i] = '0x' . bin2hex($record[$i]); } $buffer .= ' on mixed\\.$#" - count: 1 + count: 3 path: libraries/classes/Plugins/Export/ExportCsv.php - @@ -25590,6 +25590,16 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportCsv.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportCsv.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportCsv.php + - message: "#^Cannot call method fetchRow\\(\\) on mixed\\.$#" count: 1 @@ -25600,6 +25610,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportCsv.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportCsv.php + - message: "#^Cannot call method numFields\\(\\) on mixed\\.$#" count: 1 @@ -25625,6 +25640,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportCsv.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportCsv.php + - message: "#^Parameter \\#1 \\$search of function str_replace expects array\\|string, mixed given\\.$#" count: 4 @@ -25960,6 +25980,11 @@ parameters: count: 2 path: libraries/classes/Plugins/Export/ExportLatex.php + - + message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" + count: 2 + path: libraries/classes/Plugins/Export/ExportLatex.php + - message: "#^Cannot access offset mixed on mixed\\.$#" count: 3 @@ -25970,6 +25995,16 @@ parameters: count: 2 path: libraries/classes/Plugins/Export/ExportLatex.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportLatex.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportLatex.php + - message: "#^Cannot call method fetchAssoc\\(\\) on mixed\\.$#" count: 1 @@ -25985,6 +26020,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportLatex.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportLatex.php + - message: "#^Cannot call method getTableIndexes\\(\\) on mixed\\.$#" count: 1 @@ -26030,6 +26070,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportLatex.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportLatex.php + - message: "#^Parameter \\#1 \\$str of function stripslashes expects string, mixed given\\.$#" count: 2 @@ -26092,7 +26137,7 @@ parameters: - message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" - count: 1 + count: 4 path: libraries/classes/Plugins/Export/ExportMediawiki.php - @@ -26105,6 +26150,16 @@ parameters: count: 2 path: libraries/classes/Plugins/Export/ExportMediawiki.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportMediawiki.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportMediawiki.php + - message: "#^Cannot call method fetchRow\\(\\) on mixed\\.$#" count: 1 @@ -26120,6 +26175,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportMediawiki.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportMediawiki.php + - message: "#^Cannot call method numFields\\(\\) on mixed\\.$#" count: 1 @@ -26150,6 +26210,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportMediawiki.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportMediawiki.php + - message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#" count: 2 @@ -26492,7 +26557,7 @@ parameters: - message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" - count: 1 + count: 4 path: libraries/classes/Plugins/Export/ExportPhparray.php - @@ -26505,6 +26570,16 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportPhparray.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportPhparray.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportPhparray.php + - message: "#^Cannot call method fetchRow\\(\\) on mixed\\.$#" count: 1 @@ -26515,6 +26590,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportPhparray.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportPhparray.php + - message: "#^Cannot call method numFields\\(\\) on mixed\\.$#" count: 1 @@ -26545,6 +26625,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportPhparray.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportPhparray.php + - message: "#^Parameter \\#1 \\$identifier of static method PhpMyAdmin\\\\Util\\:\\:backquote\\(\\) expects string\\|Stringable\\|null, mixed given\\.$#" count: 2 @@ -27287,7 +27372,7 @@ parameters: - message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" - count: 1 + count: 3 path: libraries/classes/Plugins/Export/ExportTexytext.php - @@ -27300,6 +27385,16 @@ parameters: count: 3 path: libraries/classes/Plugins/Export/ExportTexytext.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportTexytext.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportTexytext.php + - message: "#^Cannot call method fetchRow\\(\\) on mixed\\.$#" count: 1 @@ -27315,6 +27410,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportTexytext.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportTexytext.php + - message: "#^Cannot call method getTableIndexes\\(\\) on mixed\\.$#" count: 2 @@ -27385,6 +27485,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportTexytext.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportTexytext.php + - message: "#^Parameter \\#1 \\$str of function stripslashes expects string, mixed given\\.$#" count: 1 @@ -27477,7 +27582,7 @@ parameters: - message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" - count: 2 + count: 4 path: libraries/classes/Plugins/Export/ExportXml.php - @@ -27490,6 +27595,16 @@ parameters: count: 2 path: libraries/classes/Plugins/Export/ExportXml.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportXml.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportXml.php + - message: "#^Cannot call method escapeString\\(\\) on mixed\\.$#" count: 2 @@ -27515,6 +27630,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportXml.php + - + message: "#^Cannot call method getFieldsMeta\\(\\) on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportXml.php + - message: "#^Cannot call method getProceduresOrFunctions\\(\\) on mixed\\.$#" count: 1 @@ -27595,6 +27715,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportXml.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportXml.php + - message: "#^Parameter \\#1 \\$db of method PhpMyAdmin\\\\Plugins\\\\Export\\\\ExportXml\\:\\:exportDefinitions\\(\\) expects string, mixed given\\.$#" count: 1 @@ -27662,7 +27787,7 @@ parameters: - message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#" - count: 1 + count: 3 path: libraries/classes/Plugins/Export/ExportYaml.php - @@ -27675,6 +27800,16 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportYaml.php + - + message: "#^Cannot access property \\$isBinary on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportYaml.php + + - + message: "#^Cannot access property \\$isMappedTypeGeometry on mixed\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportYaml.php + - message: "#^Cannot access property \\$name on mixed\\.$#" count: 1 @@ -27720,6 +27855,11 @@ parameters: count: 1 path: libraries/classes/Plugins/Export/ExportYaml.php + - + message: "#^Parameter \\#1 \\$data of function bin2hex expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Plugins/Export/ExportYaml.php + - message: "#^Parameter \\#1 \\$str of function stripslashes expects string, mixed given\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 369038ae22..da7a127f6a 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -9626,7 +9626,8 @@ numFields - + + $record[$columns[$i]] $record[$columns[$i]] @@ -10120,6 +10121,9 @@ $col_as + + $record[$i] +