summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2013-03-25 09:05:26 +0100
committerThomas Bruederli <bruederli@kolabsys.com>2013-04-04 21:05:15 +0200
commit8d7f8c8c795be695c190f5c20310567c5b2ce3f5 (patch)
treed7fc27bf571350cb77bd0bc080036a514af472aa
parentd6cbdea04d18dc860a402c60ee28826975e18d30 (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.php26
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;
}