Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-13661

lib/dmllib.php - rcache_set function - array_shift php native function is corrupting cached data

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Critical Critical
    • 1.8.5, 1.9
    • 1.8.5
    • Libraries, Performance
    • None
    • php > 5.1.2, Apache > 2, windows vista business edition, linux Ubuntu > 6, moodle 2007021541 (1.8.4+)
    • MOODLE_18_STABLE
    • MOODLE_18_STABLE, MOODLE_19_STABLE

      the cached data are referenced by their ids > $rcache>data[$table][$id], $rcache->data[$table] is an associative array.
      but some php native functions used to manage array data return indexed arrays. This is the case of the array_shift function.

      the new rcache_set function has corrupted some cached data of our moodle making the script to enter in an infinite loop in the lib/accesslib.php - get_parent_cats function.

      the problem is coming from this lines :

      function rcache_set($table, $id, $rec) {
      global $CFG, $MCACHE, $rcache;

      if ($CFG->cachetype === 'internal') {
      if (!isset($rcache->data[$table]))

      { $rcache->data[$table] = array(); }

      if (!isset($rcache->data[$table][$id]) and count($rcache->data[$table]) > $CFG->intcachemax)

      { array_shift($rcache->data[$table]); }

      $rcache->data[$table][$id] = clone($rec);

      to resolve the problem we have to make our own array_shift function or replace the array_shift($rcache->data[$table]); line by something like :

      $keys = array_keys($rcache->data[$table]);
      $firstkey = $keys[0];
      unset($rcache->data[$table][$firstkey]);

      hope that's help

            skodak Petr Skoda
            evillard Eric Villard
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:

                Error rendering 'clockify-timesheets-time-tracking-reports:timer-sidebar'. Please contact your Jira administrators.