diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php
index 6d8071b8..a3b6626d 100644
--- a/plugins/libkolab/lib/kolab_storage_cache.php
+++ b/plugins/libkolab/lib/kolab_storage_cache.php
@@ -37,7 +37,11 @@ class kolab_storage_cache
private $ready = false;
private $max_sql_packet;
private $max_sync_lock_time = 600;
- private $binary_cols = array('photo','pgppublickey','pkcs7publickey');
+ private $binary_items = array(
+ 'photo' => '|[^;]+;base64,([^<]+)|i',
+ 'pgppublickey' => '|date:application/pgp-keys;base64,([^<]+)|i',
+ 'pkcs7publickey' => '|date:application/pkcs7-mime;base64,([^<]+)|i',
+ );
/**
@@ -524,7 +528,6 @@ class kolab_storage_cache
*/
private function _serialize($object)
{
- $bincols = array_flip($this->binary_cols);
$sql_data = array('changed' => null, 'dtstart' => null, 'dtend' => null, 'xml' => '', 'tags' => '', 'words' => '');
$objtype = $object['_type'] ? $object['_type'] : $this->folder->type;
@@ -566,12 +569,13 @@ class kolab_storage_cache
// extract object data
$data = array();
foreach ($object as $key => $val) {
+ // skip empty properties
if ($val === "" || $val === null) {
- // skip empty properties
continue;
}
- if (isset($bincols[$key])) {
- $data[$key] = base64_encode($val);
+ // mark binary data to be extracted from xml on unserialize()
+ if (isset($this->binary_items[$key])) {
+ $data[$key] = true;
}
else if ($key[0] != '_') {
$data[$key] = $val;
@@ -597,9 +601,10 @@ class kolab_storage_cache
$object = unserialize($sql_arr['data']);
// decode binary properties
- foreach ($this->binary_cols as $key) {
- if (!empty($object[$key]))
- $object[$key] = base64_decode($object[$key]);
+ foreach ($this->binary_items as $key => $regexp) {
+ if (!empty($object[$key]) && preg_match($regexp, $sql_arr['xml'], $m)) {
+ $object[$key] = base64_decode($m[1]);
+ }
}
// add meta data
@@ -708,17 +713,15 @@ class kolab_storage_cache
if (!$sql_arr) {
$this->db->query(
"INSERT INTO kolab_cache (resource, type, msguid, created, uid, data, xml)".
- " VALUES (?, ?, 1, ?, '', '', '')",
+ " VALUES (?, ?, 1, " . $this->db->now() . ", '', '', '')",
$this->resource_uri,
- 'lock',
- date('Y-m-d H:i:s')
+ 'lock'
);
}
else {
$this->db->query(
- "UPDATE kolab_cache SET msguid=1, created=? ".
- "WHERE resource=? AND type=?",
- date('Y-m-d H:i:s'),
+ "UPDATE kolab_cache SET msguid = 1, created = " . $this->db->now() .
+ " WHERE resource = ? AND type = ?",
$this->resource_uri,
'lock'
);
@@ -734,8 +737,7 @@ class kolab_storage_cache
return;
$this->db->query(
- "UPDATE kolab_cache SET msguid=0 ".
- "WHERE resource=? AND type=?",
+ "UPDATE kolab_cache SET msguid = 0 WHERE resource = ? AND type = ?",
$this->resource_uri,
'lock'
);