1
0
mirror of https://github.com/phpmyadmin/phpmyadmin.git synced 2026-10-31 10:54:46 +03:00

Validate (sub)partion count from request before use

Signed-off-by: Michal Čihař <michal@cihar.com>
This commit is contained in:
Michal Čihař
2016-09-02 13:54:15 +02:00
parent dcc9f8585c
commit 7ddcbc0de6

View File

@@ -14,17 +14,31 @@ if (!isset($partitionDetails)) {
// Extract some partitioning and subpartitioning parameters from the request
$partitionParams = array(
'partition_by', 'partition_expr', 'partition_count',
'subpartition_by', 'subpartition_expr', 'subpartition_count'
'partition_by', 'partition_expr',
'subpartition_by', 'subpartition_expr',
);
foreach ($partitionParams as $partitionParam) {
$partitionDetails[$partitionParam] = isset($_REQUEST[$partitionParam])
? $_REQUEST[$partitionParam] : '';
}
if (PMA_isValid($_REQUEST['partition_count'], 'numeric')) {
// MySQL's limit is 8192, so do not allow more
$partition_count = min(intval($_REQUEST['partition_count']), 8192);
} else {
$partition_count = 0;
}
$partitionDetails['partition_count'] = $partition_count;
if (PMA_isValid($_REQUEST['subpartition_count'], 'numeric')) {
// MySQL's limit is 8192, so do not allow more
$subpartition_count = min(intval($_REQUEST['subpartition_count']), 8192);
} else {
$subpartition_count = 0;
}
$partitionDetails['subpartition_count'] = $subpartition_count;
// Only LIST and RANGE type parameters allow subpartitioning
$partitionDetails['can_have_subpartitions'] = isset($_REQUEST['partition_count'])
&& $_REQUEST['partition_count'] > 1
$partitionDetails['can_have_subpartitions'] = $partition_count > 1
&& isset($_REQUEST['partition_by'])
&& ($_REQUEST['partition_by'] == 'RANGE'
|| $_REQUEST['partition_by'] == 'RANGE COLUMNS'
@@ -38,18 +52,17 @@ if (!isset($partitionDetails)) {
|| $_REQUEST['partition_by'] == 'LIST'
|| $_REQUEST['partition_by'] == 'LIST COLUMNS');
if (PMA_isValid($_REQUEST['partition_count'], 'numeric')
&& $_REQUEST['partition_count'] > 1
) { // Has partitions
// Has partitions
if ($partition_count > 1) {
$partitions = isset($_REQUEST['partitions'])
? $_REQUEST['partitions']
: array();
// Remove details of the additional partitions
// when number of partitions have been reduced
array_splice($partitions, $_REQUEST['partition_count']);
array_splice($partitions, $partition_count);
for ($i = 0; $i < $_REQUEST['partition_count']; $i++) {
for ($i = 0; $i < $partition_count; $i++) {
if (! isset($partitions[$i])) { // Newly added partition
$partitions[$i] = array(
'name' => 'p' . $i,
@@ -85,11 +98,10 @@ if (!isset($partitionDetails)) {
$partition['node_group'] = '';
}
if (PMA_isValid($_REQUEST['subpartition_count'], 'numeric')
&& $_REQUEST['subpartition_count'] > 1
if ($subpartition_count > 1
&& $partitionDetails['can_have_subpartitions'] == true
) { // Has subpartitions
$partition['subpartition_count'] = $_REQUEST['subpartition_count'];
$partition['subpartition_count'] = $subpartition_count;
if (! isset($partition['subpartitions'])) {
$partition['subpartitions'] = array();
@@ -98,9 +110,9 @@ if (!isset($partitionDetails)) {
// Remove details of the additional subpartitions
// when number of subpartitions have been reduced
array_splice($subpartitions, $_REQUEST['subpartition_count']);
array_splice($subpartitions, $subpartition_count);
for ($j = 0; $j < $_REQUEST['subpartition_count']; $j++) {
for ($j = 0; $j < $subpartition_count; $j++) {
if (! isset($subpartitions[$j])) { // Newly added subpartition
$subpartitions[$j] = array(
'name' => $partition['name'] . '_s' . $j,