Merge branch 'MDL-69762_master' of https://github.com/grillonbleu/moodle
authorSara Arjona <sara@moodle.com>
Tue, 16 Feb 2021 14:29:34 +0000 (15:29 +0100)
committerSara Arjona <sara@moodle.com>
Tue, 16 Feb 2021 14:29:34 +0000 (15:29 +0100)
h5p/embed.php
h5p/templates/h5pembed.mustache
h5p/templates/h5perror.mustache
lib/moodlelib.php
lib/tcpdf/include/tcpdf_static.php
lib/tcpdf/readme_moodle.txt
lib/tests/pdflib_test.php [new file with mode: 0644]

index 3601436..779b325 100644 (file)
@@ -87,6 +87,9 @@ if (empty($messages->error) && empty($messages->exception)) {
     $PAGE->add_body_class('h5p-embed');
     $PAGE->set_pagelayout('embedded');
 
+    // Load the embed.js to allow communication with the parent window.
+    $PAGE->requires->js(new moodle_url('/h5p/js/embed.js'));
+
     echo $OUTPUT->header();
 
     // Print all the errors.
index 7a3502a..1a64f3c 100644 (file)
    allowfullscreen="allowfullscreen" class="h5p-player w-100 border-0"
    style="height: 0px;" id="{{uniqid}}-h5player">
 </iframe>
-{{#js}}
-window.onload=function(){
-    setTimeout(() => {
-        document.getElementById('{{uniqid}}-h5player').style.minHeight = '230px';
-    }, 1000);
-};
-{{/js}}
index d455985..78f20d2 100644 (file)
@@ -19,6 +19,8 @@
 
     This template will render the embed code shown in the H5P content embed popup.
 
+    Note: this mustache is part of the H5P player and requires '/h5p/js/embed.js' already loaded.
+
     Variables required for this template:
     * h5picon - The icon
     * message - The error messages to display.
       </div>
       {{/error}}
    </div>
-</div>
\ No newline at end of file
+</div>
+{{#js}}
+(function() {
+   H5PEmbedCommunicator.send('resize', {
+      scrollHeight: document.body.scrollHeight
+   });
+})();
+{{/js}}
index 4d34558..05b124f 100644 (file)
@@ -1457,6 +1457,8 @@ function set_config($name, $value, $plugin=null) {
  *
  * NOTE: this function is called from lib/db/upgrade.php
  *
+ * @static string|false $siteidentifier The site identifier is not cached. We use this static cache so
+ *     that we need only fetch it once per request.
  * @param string $plugin full component name
  * @param string $name default null
  * @return mixed hash-like object or single value, return false no config found
@@ -1465,29 +1467,52 @@ function set_config($name, $value, $plugin=null) {
 function get_config($plugin, $name = null) {
     global $CFG, $DB;
 
+    static $siteidentifier = null;
+
     if ($plugin === 'moodle' || $plugin === 'core' || empty($plugin)) {
         $forced =& $CFG->config_php_settings;
-        $table = 'config';
-        $filter = [];
+        $iscore = true;
         $plugin = 'core';
     } else {
         if (array_key_exists($plugin, $CFG->forced_plugin_settings)) {
             $forced =& $CFG->forced_plugin_settings[$plugin];
         } else {
-            $forced = [];
+            $forced = array();
         }
-        $table = 'config_plugins';
-        $filter = ['plugin' => $plugin];
+        $iscore = false;
     }
 
-    if (!empty($name) && array_key_exists($name, $forced)) {
-        return (string)$forced[$name];
+    if ($siteidentifier === null) {
+        try {
+            // This may fail during installation.
+            // If you have a look at {@link initialise_cfg()} you will see that this is how we detect the need to
+            // install the database.
+            $siteidentifier = $DB->get_field('config', 'value', array('name' => 'siteidentifier'));
+        } catch (dml_exception $ex) {
+            // Set siteidentifier to false. We don't want to trip this continually.
+            $siteidentifier = false;
+            throw $ex;
+        }
+    }
+
+    if (!empty($name)) {
+        if (array_key_exists($name, $forced)) {
+            return (string)$forced[$name];
+        } else if ($name === 'siteidentifier' && $plugin == 'core') {
+            return $siteidentifier;
+        }
     }
 
     $cache = cache::make('core', 'config');
     $result = $cache->get($plugin);
     if ($result === false) {
-        $result = $DB->get_records_menu($table, $filter, '', 'name,value');
+        // The user is after a recordset.
+        if (!$iscore) {
+            $result = $DB->get_records_menu('config_plugins', array('plugin' => $plugin), '', 'name,value');
+        } else {
+            // This part is not really used any more, but anyway...
+            $result = $DB->get_records_menu('config', array(), '', 'name,value');;
+        }
         $cache->set($plugin, $result);
     }
 
@@ -1498,6 +1523,10 @@ function get_config($plugin, $name = null) {
         return false;
     }
 
+    if ($plugin === 'core') {
+        $result['siteidentifier'] = $siteidentifier;
+    }
+
     foreach ($forced as $key => $value) {
         if (is_null($value) or is_array($value) or is_object($value)) {
             // We do not want any extra mess here, just real settings that could be saved in db.
index 0139dbe..6d7897c 100644 (file)
@@ -125,7 +125,7 @@ class TCPDF_STATIC {
         * @public static
         */
        public static function getTCPDFProducer() {
-               return "\x54\x43\x50\x44\x46\x20".self::getTCPDFVersion()."\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29";
+               return "\x54\x43\x50\x44\x46\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29";
        }
 
        /**
index c7d88e9..3b22ec9 100644 (file)
@@ -5,12 +5,18 @@ Description of TCPDF library import 6.3.5
 * remove tcpdf_import.php from composer.json
 * remove all fonts that were not already present
 * visit http://127.0.0.1/lib/tests/other/pdflibtestpage.php and view the pdf
+* modify getTCPDFProducer lib/tcpdf/include/tcpdf_static.php to remove the version number
 
 Important
 ---------
 A new version of the libray is being developed @ https://github.com/tecnickcom/tc-lib-pdf . Check periodically when it's ready
 and if it's a drop-in replacement for the legacy tcpdf one.
 
+2021/02/11
+----------
+Reduce PDF metadata disclosure (MDL-70735)
+by Brendan Heywood <brendan@catalyst-au.net>
+
 2020/12/15
 ----------
 Upgrade to tcpdf TCPDF 6.3.5 (MDL-70294)
diff --git a/lib/tests/pdflib_test.php b/lib/tests/pdflib_test.php
new file mode 100644 (file)
index 0000000..e9a68f8
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Tests for PDFlib
+ *
+ * @package    core
+ * @copyright  2021 Brendan Heywood (brendan@catalyst-au.net)
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Tests for PDFlib
+ *
+ * @package    core
+ * @copyright  2021 Brendan Heywood (brendan@catalyst-au.net)
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class core_pdflib_testcase extends advanced_testcase {
+
+    public function test_gettcpdf_producer() {
+        global $CFG;
+        require_once($CFG->libdir.'/pdflib.php');
+
+        // This is to reduce the information disclosure in PDF metadata.
+        // If we upgrade TCPDF keep it just the major version.
+        $producer = TCPDF_STATIC::getTCPDFProducer();
+        $this->assertEquals('TCPDF (http://www.tcpdf.org)', $producer);
+    }
+}