diff options
Diffstat (limited to 'src/usr/local/www/pkg_edit.php')
-rw-r--r-- | src/usr/local/www/pkg_edit.php | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/usr/local/www/pkg_edit.php b/src/usr/local/www/pkg_edit.php index 19cdb1f..69b4053 100644 --- a/src/usr/local/www/pkg_edit.php +++ b/src/usr/local/www/pkg_edit.php @@ -86,10 +86,15 @@ if ($config['installedpackages'] && !is_array($config['installedpackages'][xml_s $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array(); } -// If the first entry in the array is an empty <config/> tag, kill it. +/* If the first entry in the array is an empty <config/> tag, kill it. + * See the following tickets for more: + * https://redmine.pfsense.org/issues/7624 + * https://redmine.pfsense.org/issues/476 + */ if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0) && - (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0]) == 0)) { + (empty($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0])) && + is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) { array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']); } @@ -207,7 +212,12 @@ if ($_POST) { } } - if (isset($id) && $a_pkg[$id]) { + /* If the user supplied an ID and it exists, or if id=0 + * and the settings are invalid, overwrite. + * See https://redmine.pfsense.org/issues/7624 + */ + if (isset($id) && ($a_pkg[$id] || + (($id == 0) && !is_array($a_pkg[$id])) )) { $a_pkg[$id] = $pkgarr; } else { $a_pkg[] = $pkgarr; @@ -677,7 +687,7 @@ foreach ($pkg['fields']['field'] as $pkga) { )); $advfield_count++; - } else { + } else { if (isset($section)) { $form->add($section); } |