diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2013-03-25 09:05:26 +0100 |
---|---|---|
committer | Thomas Bruederli <bruederli@kolabsys.com> | 2013-04-04 21:05:15 +0200 |
commit | 8d7f8c8c795be695c190f5c20310567c5b2ce3f5 (patch) | |
tree | d7fc27bf571350cb77bd0bc080036a514af472aa | |
parent | d6cbdea04d18dc860a402c60ee28826975e18d30 (diff) |
Check for exact matching session keys before splitting into path segments. Adds backwards-compatibility after commit f0a7159c
-rw-r--r-- | program/lib/Roundcube/rcube_session.php | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/program/lib/Roundcube/rcube_session.php b/program/lib/Roundcube/rcube_session.php index 82ff8a804..4282c0cbb 100644 --- a/program/lib/Roundcube/rcube_session.php +++ b/program/lib/Roundcube/rcube_session.php @@ -203,10 +203,15 @@ class rcube_session if (is_array($a_oldvars)) { // remove unset keys on oldvars foreach ((array)$this->unsets as $var) { - $path = explode('.', $var); - $k = array_pop($path); - $node = &$this->get_node($path, $a_oldvars); - unset($node[$k]); + if (isset($a_oldvars[$k])) { + unset($a_oldvars[$k]); + } + else { + $path = explode('.', $var); + $k = array_pop($path); + $node = &$this->get_node($path, $a_oldvars); + unset($node[$k]); + } } $newvars = $this->serialize(array_merge( @@ -413,10 +418,15 @@ class rcube_session $this->unsets[] = $var; - $path = explode('.', $var); - $key = array_pop($path); - $node = &$this->get_node($path, $_SESSION); - unset($node[$key]); + if (isset($_SESSION[$var])) { + unset($_SESSION[$var]) + } + else { + $path = explode('.', $var); + $key = array_pop($path); + $node = &$this->get_node($path, $_SESSION); + unset($node[$key]); + } return true; } |