From: Michael J. Rubinsky Date: Sat, 10 Apr 2010 14:09:42 +0000 (-0400) Subject: Throw exception if synckey is mangled, and return appropriate status code to PIM X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=669bf14a4371eb61c356b5e11db2f4d9967ff6a9;p=horde.git Throw exception if synckey is mangled, and return appropriate status code to PIM --- diff --git a/framework/ActiveSync/lib/Horde/ActiveSync.php b/framework/ActiveSync/lib/Horde/ActiveSync.php index e6dced111..1f6556e84 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync.php @@ -678,8 +678,12 @@ class Horde_ActiveSync } // Get state of hierarchy - $syncstate = $this->_stateMachine->loadState($synckey); - $newsynckey = $this->_stateMachine->getNewSyncKey($synckey); + try { + $syncstate = $this->_stateMachine->loadState($synckey); + $newsynckey = $this->_stateMachine->getNewSyncKey($synckey); + } catch (Horde_ActiveSync_Exception $e) { + // @TODO - send error status keymism when refactored. + } // additional information about already seen folders $seenfolders = unserialize($this->_stateMachine->loadState('s' . $synckey)); diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php index 85ba7d021..7a5d5c041 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Request/FolderSync.php @@ -74,15 +74,15 @@ class Horde_ActiveSync_Request_FolderSync extends Horde_ActiveSync_Request_Base try { /* Get folders that we know about already */ $state->loadState($synckey); + + /* Get new synckey to send back */ + $newsynckey = $state->getNewSyncKey($synckey); } catch (Horde_ActiveSync_Exception $e) { $this->_statusCode = self::STATUS_KEYMISM; $this->_handleError(); exit; } $seenfolders = $state->getKnownFolders(); - - /* Get new synckey to send back */ - $newsynckey = $state->getNewSyncKey($synckey); $this->_logger->debug('[Horde_ActiveSync::handleFolderSync] newSyncKey: ' . $newsynckey); /* Deal with folder hierarchy changes */ diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php b/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php index a2b17f8c5..5261747e5 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Request/Sync.php @@ -367,8 +367,11 @@ class Horde_ActiveSync_Request_Sync extends Horde_ActiveSync_Request_Base if (isset($collection['importedchanges']) || isset($collection['getchanges']) || $collection['synckey'] == '0') { - - $collection['newsynckey'] = $state->getNewSyncKey($collection['synckey']); + try { + $collection['newsynckey'] = $state->getNewSyncKey($collection['synckey']); + } catch (Horde_ActiveSync_Exception $e) { + $this->_statusCode = self::STATUS_KEYMISM; + } } $this->_encoder->startTag(Horde_ActiveSync::SYNC_FOLDER); diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php b/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php index c55c8030f..6dd5a0dc1 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php @@ -296,6 +296,7 @@ abstract class Horde_ActiveSync_State_Base * @param string $syncKey The old syncKey * * @return string The new synckey + * @throws Horde_ActiveSync_Exception */ static public function getNewSyncKey($syncKey) { @@ -308,9 +309,7 @@ abstract class Horde_ActiveSync_State_Base return '{' . $matches[1] . '}' . $n; } - - // @TODO: should this thrown an exception instead of returning false? - return false; + throw new Horde_ActiveSync_Exception('Invalid SyncKey format passed to getNewSyncKey()'); } }