diff --git a/lib/Horde/ActiveSync/Request/Sync.php b/lib/Horde/ActiveSync/Request/Sync.php index 79057978..0c90d4f9 100644 --- a/lib/Horde/ActiveSync/Request/Sync.php +++ b/lib/Horde/ActiveSync/Request/Sync.php @@ -1250,14 +1250,15 @@ protected function _handleError(array $collection) $this->_encoder->startTag(Horde_ActiveSync::SYNC_FOLDERS); - // Get new synckey if needed + // Generate new synckey for initial sync, state reset, or when synckey missing/invalid if ($this->_statusCode == self::STATUS_KEYMISM || !empty($collection['importedchanges']) || !empty($collection['getchanges']) || + empty($collection['synckey']) || $collection['synckey'] == '0') { - $collection['newsynckey'] = Horde_ActiveSync_State_Base::getNewSyncKey(($this->_statusCode == self::STATUS_KEYMISM) ? 0 : $collection['synckey']); - if ($collection['synckey'] != '0') { + $collection['newsynckey'] = Horde_ActiveSync_State_Base::getNewSyncKey(($this->_statusCode == self::STATUS_KEYMISM) ? 0 : ($collection['synckey'] ?? 0)); + if (!empty($collection['synckey']) && $collection['synckey'] != '0') { $this->_state->removeState(array('synckey' => $collection['synckey'])); } }