From 196cb4e1f0ca1b7f0edb20bc074b03332fff183a Mon Sep 17 00:00:00 2001 From: Julien Boulen Date: Thu, 19 Aug 2021 11:09:27 +0200 Subject: [PATCH] MDL-71093 backup: fix backup when activity names use HTML tags --- backup/util/ui/backup_ui_setting.class.php | 8 ++- backup/util/ui/tests/base_setting_ui_test.php | 70 +++++++++++++++++++ 2 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 backup/util/ui/tests/base_setting_ui_test.php diff --git a/backup/util/ui/backup_ui_setting.class.php b/backup/util/ui/backup_ui_setting.class.php index 973b1553de5..da74cfec88e 100644 --- a/backup/util/ui/backup_ui_setting.class.php +++ b/backup/util/ui/backup_ui_setting.class.php @@ -146,11 +146,13 @@ class base_setting_ui { * @throws base_setting_ui_exception when the label is not valid. * @param string $label */ - public function set_label($label) { - $label = (string)$label; - if ($label === '' || $label !== clean_param($label, PARAM_TEXT)) { + public function set_label(string $label) :void { + $label = clean_param($label, PARAM_CLEANHTML); + + if ($label === '') { throw new base_setting_ui_exception('setting_invalid_ui_label'); } + $this->label = $label; } diff --git a/backup/util/ui/tests/base_setting_ui_test.php b/backup/util/ui/tests/base_setting_ui_test.php new file mode 100644 index 00000000000..6aa3da6c09b --- /dev/null +++ b/backup/util/ui/tests/base_setting_ui_test.php @@ -0,0 +1,70 @@ +. + +/** + * Tests for base_setting_ui class. + * + * @package core_backup + * @copyright 2021 Université Rennes 2 {@link https://www.univ-rennes2.fr} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot.'/backup/util/settings/tests/settings_test.php'); + +/** + * Tests for base_setting_ui class. + * + * @copyright 2021 Université Rennes 2 {@link https://www.univ-rennes2.fr} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class base_setting_ui_test extends advanced_testcase { + /** + * Tests set_label(). + * + * @return void + */ + public function test_set_label() { + $this->resetAfterTest(); + + $bs = new mock_base_setting('test', base_setting::IS_BOOLEAN); + $bsui = new base_setting_ui($bs); + + // Should keep original text string. + $bsui->set_label('Section name'); + $this->assertEquals('Section name', $bsui->get_label()); + + // Should keep original HTML string. + $bsui->set_label('Section name'); + $this->assertEquals('Section name', $bsui->get_label()); + + // Should be converted to text string. + $bsui->set_label(123); + $this->assertSame('123', $bsui->get_label()); + + // Should raise an exception when label is empty. + try { + $bsui->set_label(''); + $this->assertTrue(false, 'base_setting_ui_exception'); + } catch (Exception $exception) { + $this->assertTrue($exception instanceof base_setting_ui_exception); + $this->assertEquals($exception->errorcode, 'setting_invalid_ui_label'); + } + } +}