From f43285a28da867bfdbec2f3e486e4e194d92f4f0 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Sun, 24 Oct 2021 22:22:26 +0100 Subject: [PATCH] MDL-70823 mod: safely parse module display options array. --- mod/page/lib.php | 2 +- mod/page/mod_form.php | 2 +- mod/page/view.php | 2 +- mod/resource/lib.php | 4 ++-- mod/resource/locallib.php | 8 ++++---- mod/resource/mod_form.php | 2 +- mod/url/lib.php | 2 +- mod/url/locallib.php | 6 +++--- mod/url/mod_form.php | 6 +++--- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/mod/page/lib.php b/mod/page/lib.php index 82d7725f542..d6fec761819 100644 --- a/mod/page/lib.php +++ b/mod/page/lib.php @@ -229,7 +229,7 @@ function page_get_coursemodule_info($coursemodule) { } $fullurl = "$CFG->wwwroot/mod/page/view.php?id=$coursemodule->id&inpopup=1"; - $options = empty($page->displayoptions) ? array() : unserialize($page->displayoptions); + $options = empty($page->displayoptions) ? [] : (array) unserialize_array($page->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; diff --git a/mod/page/mod_form.php b/mod/page/mod_form.php index ad87aec0beb..2052dffd667 100644 --- a/mod/page/mod_form.php +++ b/mod/page/mod_form.php @@ -130,7 +130,7 @@ class mod_page_mod_form extends moodleform_mod { $defaultvalues['page']['itemid'] = $draftitemid; } if (!empty($defaultvalues['displayoptions'])) { - $displayoptions = unserialize($defaultvalues['displayoptions']); + $displayoptions = (array) unserialize_array($defaultvalues['displayoptions']); if (isset($displayoptions['printintro'])) { $defaultvalues['printintro'] = $displayoptions['printintro']; } diff --git a/mod/page/view.php b/mod/page/view.php index 4297a7fb7f0..201f7252990 100644 --- a/mod/page/view.php +++ b/mod/page/view.php @@ -56,7 +56,7 @@ page_view($page, $course, $cm, $context); $PAGE->set_url('/mod/page/view.php', array('id' => $cm->id)); -$options = empty($page->displayoptions) ? array() : unserialize($page->displayoptions); +$options = empty($page->displayoptions) ? [] : (array) unserialize_array($page->displayoptions); if ($inpopup and $page->display == RESOURCELIB_DISPLAY_POPUP) { $PAGE->set_pagelayout('popup'); diff --git a/mod/resource/lib.php b/mod/resource/lib.php index ac53899a58c..d9de5024204 100644 --- a/mod/resource/lib.php +++ b/mod/resource/lib.php @@ -234,7 +234,7 @@ function resource_get_coursemodule_info($coursemodule) { if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; - $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); + $options = empty($resource->displayoptions) ? [] : (array) unserialize_array($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; @@ -250,7 +250,7 @@ function resource_get_coursemodule_info($coursemodule) { // add some file details as well to be used later by resource_get_optional_details() without retriving. // Do not store filedetails if this is a reference - they will still need to be retrieved every time. if (($filedetails = resource_get_file_details($resource, $coursemodule)) && empty($filedetails['isref'])) { - $displayoptions = @unserialize($resource->displayoptions); + $displayoptions = (array) unserialize_array($resource->displayoptions); $displayoptions['filedetails'] = $filedetails; $info->customdata = serialize($displayoptions); } else { diff --git a/mod/resource/locallib.php b/mod/resource/locallib.php index 9584746f157..f0a7a70e114 100644 --- a/mod/resource/locallib.php +++ b/mod/resource/locallib.php @@ -214,7 +214,7 @@ function resource_print_workaround($resource, $cm, $course, $file) { case RESOURCELIB_DISPLAY_POPUP: $path = '/'.$file->get_contextid().'/mod_resource/content/'.$resource->revision.$file->get_filepath().$file->get_filename(); $fullurl = file_encode_url($CFG->wwwroot.'/pluginfile.php', $path, false); - $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); + $options = empty($resource->displayoptions) ? [] : (array) unserialize_array($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; @@ -280,7 +280,7 @@ function resource_print_heading($resource, $cm, $course, $notused = false) { * @return string Size and type or empty string if show options are not enabled */ function resource_get_file_details($resource, $cm) { - $options = empty($resource->displayoptions) ? array() : @unserialize($resource->displayoptions); + $options = empty($resource->displayoptions) ? [] : (array) unserialize_array($resource->displayoptions); $filedetails = array(); if (!empty($options['showsize']) || !empty($options['showtype']) || !empty($options['showdate'])) { $context = context_module::instance($cm->id); @@ -349,7 +349,7 @@ function resource_get_optional_details($resource, $cm) { $details = ''; - $options = empty($resource->displayoptions) ? array() : @unserialize($resource->displayoptions); + $options = empty($resource->displayoptions) ? [] : (array) unserialize_array($resource->displayoptions); if (!empty($options['showsize']) || !empty($options['showtype']) || !empty($options['showdate'])) { if (!array_key_exists('filedetails', $options)) { $filedetails = resource_get_file_details($resource, $cm); @@ -410,7 +410,7 @@ function resource_get_optional_details($resource, $cm) { function resource_print_intro($resource, $cm, $course, $ignoresettings=false) { global $OUTPUT; - $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); + $options = empty($resource->displayoptions) ? [] : (array) unserialize_array($resource->displayoptions); $extraintro = resource_get_optional_details($resource, $cm); if ($extraintro) { diff --git a/mod/resource/mod_form.php b/mod/resource/mod_form.php index 37f2c480f1d..0f1addfc00c 100644 --- a/mod/resource/mod_form.php +++ b/mod/resource/mod_form.php @@ -158,7 +158,7 @@ class mod_resource_mod_form extends moodleform_mod { $default_values['files'] = $draftitemid; } if (!empty($default_values['displayoptions'])) { - $displayoptions = unserialize($default_values['displayoptions']); + $displayoptions = (array) unserialize_array($default_values['displayoptions']); if (isset($displayoptions['printintro'])) { $default_values['printintro'] = $displayoptions['printintro']; } diff --git a/mod/url/lib.php b/mod/url/lib.php index b8050297f9b..0d0e73d0bdc 100644 --- a/mod/url/lib.php +++ b/mod/url/lib.php @@ -226,7 +226,7 @@ function url_get_coursemodule_info($coursemodule) { if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "$CFG->wwwroot/mod/url/view.php?id=$coursemodule->id&redirect=1"; - $options = empty($url->displayoptions) ? array() : unserialize($url->displayoptions); + $options = empty($url->displayoptions) ? [] : (array) unserialize_array($url->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; diff --git a/mod/url/locallib.php b/mod/url/locallib.php index 04e47f5ccda..7c12bf49e01 100644 --- a/mod/url/locallib.php +++ b/mod/url/locallib.php @@ -83,7 +83,7 @@ function url_fix_submitted_url($url) { */ function url_get_full_url($url, $cm, $course, $config=null) { - $parameters = empty($url->parameters) ? array() : unserialize($url->parameters); + $parameters = empty($url->parameters) ? [] : (array) unserialize_array($url->parameters); // make sure there are no encoded entities, it is ok to do this twice $fullurl = html_entity_decode($url->externalurl, ENT_QUOTES, 'UTF-8'); @@ -195,7 +195,7 @@ function url_print_heading($url, $cm, $course, $notused = false) { function url_print_intro($url, $cm, $course, $ignoresettings=false) { global $OUTPUT; - $options = empty($url->displayoptions) ? array() : unserialize($url->displayoptions); + $options = empty($url->displayoptions) ? [] : (array) unserialize_array($url->displayoptions); if ($ignoresettings or !empty($options['printintro'])) { if (trim(strip_tags($url->intro))) { echo $OUTPUT->box_start('mod_introbox', 'urlintro'); @@ -277,7 +277,7 @@ function url_print_workaround($url, $cm, $course) { $display = url_get_final_display_type($url); if ($display == RESOURCELIB_DISPLAY_POPUP) { $jsfullurl = addslashes_js($fullurl); - $options = empty($url->displayoptions) ? array() : unserialize($url->displayoptions); + $options = empty($url->displayoptions) ? [] : (array) unserialize_array($url->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; diff --git a/mod/url/mod_form.php b/mod/url/mod_form.php index 2328ccae4af..eb3d2d0a191 100644 --- a/mod/url/mod_form.php +++ b/mod/url/mod_form.php @@ -105,7 +105,7 @@ class mod_url_mod_form extends moodleform_mod { if (empty($this->current->parameters)) { $parcount = 5; } else { - $parcount = 5 + count(unserialize($this->current->parameters)); + $parcount = 5 + count((array) unserialize_array($this->current->parameters)); $parcount = ($parcount > 100) ? 100 : $parcount; } $options = url_get_variable_options($config); @@ -131,7 +131,7 @@ class mod_url_mod_form extends moodleform_mod { function data_preprocessing(&$default_values) { if (!empty($default_values['displayoptions'])) { - $displayoptions = unserialize($default_values['displayoptions']); + $displayoptions = (array) unserialize_array($default_values['displayoptions']); if (isset($displayoptions['printintro'])) { $default_values['printintro'] = $displayoptions['printintro']; } @@ -143,7 +143,7 @@ class mod_url_mod_form extends moodleform_mod { } } if (!empty($default_values['parameters'])) { - $parameters = unserialize($default_values['parameters']); + $parameters = (array) unserialize_array($default_values['parameters']); $i = 0; foreach ($parameters as $parameter=>$variable) { $default_values['parameter_'.$i] = $parameter;