Skip to content

Commit

Permalink
Rework serialization changes
Browse files Browse the repository at this point in the history
    - maintain usage of json encoding to save cache storage where possible
    - remove associative arrays in favor of numerically indexed arrays
      when serializing.
  • Loading branch information
mrubinsk committed Nov 1, 2022
1 parent ba52d0a commit b47013f
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 172 deletions.
16 changes: 3 additions & 13 deletions lib/Horde/Imap/Client/Base.php
Original file line number Diff line number Diff line change
Expand Up @@ -364,28 +364,18 @@ public function update(SplSubject $subject)
*/
public function serialize()
{
return serialize(array(
'i' => $this->_init,
'p' => $this->_params,
'v' => self::VERSION
));
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$data = @unserialize($data);
if (!is_array($data) ||
!isset($data['v']) ||
($data['v'] != self::VERSION)) {
if (!is_array($data)) {
throw new Exception('Cache version change');
}

$this->_init = $data['i'];
$this->_params = $data['p'];

$this->_initOb();
$this->__unserialize($data);
}

/**
Expand Down
5 changes: 2 additions & 3 deletions lib/Horde/Imap/Client/Cache/Backend.php
Original file line number Diff line number Diff line change
Expand Up @@ -151,15 +151,14 @@ abstract public function clear($lifetime);
*/
public function serialize()
{
return serialize($this->_params);
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$this->_params = unserialize($data);
$this->_initOb();
$this->__unserialize(unserialize($data));
}

/**
Expand Down
3 changes: 1 addition & 2 deletions lib/Horde/Imap/Client/Cache/Backend/Cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -499,8 +499,7 @@ protected function _toUpdate($mailbox, $type, $data)
*/
public function serialize()
{
$this->save();
return parent::serialize();
return $this->__serialize();
}

/**
Expand Down
8 changes: 6 additions & 2 deletions lib/Horde/Imap/Client/Data/Acl.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,18 @@ public function getIterator()
*/
public function serialize()
{
return json_encode($this->_rights);
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$this->_rights = json_decode($data);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version changed.');
}
$this->__unserialize($data);
}

/**
Expand Down
21 changes: 10 additions & 11 deletions lib/Horde/Imap/Client/Data/AclRights.php
Original file line number Diff line number Diff line change
Expand Up @@ -201,34 +201,33 @@ public function valid()
*/
public function serialize()
{
return json_encode(array(
$this->_required,
$this->_optional
));
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
list($this->_required, $this->_optional) = json_decode($data);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version changed.');
}
$this->__unserialize($data);
}

/**
* @return array
*/
public function __serialize()
{
return array(
'required' => $this->_required,
'optional' => $this->_optional,
);
return array(json_encode(
array($this->_required, $this->_optional)
));
}

public function __unserialize(array $data)
{
$this->_required = $data['required'];
$this->_optional = $data['optional'];
list($this->_required, $this->_optional) = json_decode($data[0], true);
}

}
12 changes: 8 additions & 4 deletions lib/Horde/Imap/Client/Data/Capability.php
Original file line number Diff line number Diff line change
Expand Up @@ -204,27 +204,31 @@ public function notify()
*/
public function serialize()
{
return json_encode($this->_data);
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$this->_data = json_decode($data, true);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version change.');
}
$this->__unserialize();
}

/**
* @return array
*/
public function __serialize()
{
return $this->_data;
return array(json_encode($this->_data));
}

public function __unserialize(array $data)
{
$this->_data = $data;
$this->_data = json_decode($data[0], true);
}

}
12 changes: 2 additions & 10 deletions lib/Horde/Imap/Client/Data/Envelope.php
Original file line number Diff line number Diff line change
Expand Up @@ -205,22 +205,14 @@ protected function _normalizeProperty($name)
*/
public function serialize()
{
return serialize(array(
'd' => $this->_data,
'v' => self::VERSION
));
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$data = @unserialize($data);
if (empty($data['v']) || ($data['v'] != self::VERSION)) {
throw new Exception('Cache version change');
}

$this->_data = $data['d'];
$this->__unserialize(@unserialize($data));
}

/**
Expand Down
12 changes: 8 additions & 4 deletions lib/Horde/Imap/Client/Data/Namespace.php
Original file line number Diff line number Diff line change
Expand Up @@ -130,27 +130,31 @@ public function __toString()
*/
public function serialize()
{
return json_encode($this->_data);
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$this->_data = json_decode($data, true);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version change.');
}
$this->__unserialize($data);
}

/**
* @return array
*/
public function __serialize()
{
return $this->_data;
return array(json_encode($this->_data));
}

public function __unserialize(array $data)
{
$this->_data = $data;
$this->_data = json_decode($data[0], true);
}

}
12 changes: 8 additions & 4 deletions lib/Horde/Imap/Client/Data/SearchCharset.php
Original file line number Diff line number Diff line change
Expand Up @@ -168,27 +168,31 @@ public function notify()
*/
public function serialize()
{
return json_encode($this->_charsets);
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
$this->_charsets = json_decode($data, true);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version change');
}
$this->__unserialize($data);
}

/**
* @return array
*/
public function __serialize()
{
return $this->_charsets;
return array(json_encode($this->_charsets));
}

public function __unserialize(array $data)
{
$this->_charsets = $data;
$this->_charsets = json_decode($data[0], true);
}

}
22 changes: 11 additions & 11 deletions lib/Horde/Imap/Client/Data/Thread.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,34 +183,34 @@ public function count()
*/
public function serialize()
{
return json_encode(array(
$this->_thread,
$this->_type
));
return serialize($this->__serialize());
}

/**
*/
public function unserialize($data)
{
list($this->_thread, $this->_type) = json_decode($data, true);
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version changed.');
}
$this->__unserialize($data);
}

/**
* @return array
*/
public function __serialize()
{
return array(
'thread' => $this->_thread,
'type' => $this->_type,
);
return array(json_encode(array(
$this->_thread,
$this->_type,
)));
}

public function __unserialize(array $data)
{
$this->_thread = $data['thread'];
$this->_type = $data['type'];
list($this->_thread, $this->_type) = json_decode($data[0], true);
}

/* Protected methods. */
Expand Down
60 changes: 25 additions & 35 deletions lib/Horde/Imap/Client/Ids.php
Original file line number Diff line number Diff line change
Expand Up @@ -435,11 +435,24 @@ public function valid()
return !is_null($this->key());
}

/* Serializable methods. */
public function serialize()
{
return serialize($this->__serialize());
}

public function unserialize($data)
{
$data = @unserialize($data);
if (!is_array($data)) {
throw new Exception('Cache version change.');
}

$this->__unserialize($data);
}

/**
*/
public function serialize()
public function __serialize()
{
$save = array();

Expand Down Expand Up @@ -473,49 +486,26 @@ public function serialize()
break;
}

return serialize($save);
return $save;
}

/**
*/
public function unserialize($data)
public function __unserialize($data)
{
$save = @unserialize($data);

$this->duplicates = !empty($save['d']);
$this->_sequence = !empty($save['s']);
$this->_sorted = !empty($save['is']);
$this->duplicates = !empty($data['d']);
$this->_sequence = !empty($data['s']);
$this->_sorted = !empty($data['is']);

if (isset($save['a'])) {
if (isset($data['a'])) {
$this->_ids = self::ALL;
} elseif (isset($save['l'])) {
} elseif (isset($data['l'])) {
$this->_ids = self::LARGEST;
} elseif (isset($save['sr'])) {
} elseif (isset($data['sr'])) {
$this->_ids = self::SEARCH_RES;
} elseif (isset($save['i'])) {
$this->add($save['i']);
} elseif (isset($data['i'])) {
$this->add($data['i']);
}
}

/**
* @return array
*/
public function __serialize()
{
return array(
'd' => $this->duplicates,
's' => $this->_sequence,
'is' => $this->_sorted,
'ids' => $this->_ids,
);
}

public function __unserialize(array $data)
{
$this->duplicates = $data['d'];
$this->_sequence = $data['s'];
$this->_sorted = $data['is'];
$this->_ids = $data['ids'];
}

}

0 comments on commit b47013f

Please sign in to comment.