Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 0630888

Browse files
committed
fixed #95: don't try to unserialize missing values
1 parent bc215ac commit 0630888

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

src/Storage/Plugin/Serializer.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,12 @@ public function attach(EventManagerInterface $events, $priority = 1)
6767
*/
6868
public function onReadItemPost(PostEvent $event)
6969
{
70-
$serializer = $this->getOptions()->getSerializer();
71-
$result = $event->getResult();
72-
$result = $serializer->unserialize($result);
73-
$event->setResult($result);
70+
$result = $event->getResult();
71+
if ($result !== null) {
72+
$serializer = $this->getOptions()->getSerializer();
73+
$result = $serializer->unserialize($result);
74+
$event->setResult($result);
75+
}
7476
}
7577

7678
/**

test/Storage/Plugin/SerializerTest.php

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,43 @@ public function testRemovePlugin()
9797

9898
public function testUnserializeOnReadItem()
9999
{
100+
$args = new ArrayObject([
101+
'key' => 'test',
102+
'success' => true,
103+
'casToken' => null,
104+
]);
100105
$value = serialize(123);
101-
$event = new PostEvent('getItem.post', $this->_adapter, new ArrayObject(), $value);
106+
$event = new PostEvent('getItem.post', $this->_adapter, $args, $value);
102107
$this->_plugin->onReadItemPost($event);
103108

104-
$this->assertFalse($event->propagationIsStopped());
105-
$this->assertSame(123, $event->getResult());
109+
$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
110+
$this->assertSame(123, $event->getResult(), 'Result was not unserialized');
111+
}
112+
113+
public function testDontUnserializeOnReadMissingItem()
114+
{
115+
$args = new ArrayObject(['key' => 'test']);
116+
$value = null;
117+
$event = new PostEvent('getItem.post', $this->_adapter, $args, $value);
118+
$this->_plugin->onReadItemPost($event);
119+
120+
$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
121+
$this->assertSame($value, $event->getResult(), 'Missing item was unserialized');
106122
}
107123

108124
public function testUnserializeOnReadItems()
109125
{
110126
$values = ['key1' => serialize(123), 'key2' => serialize(456)];
111-
$event = new PostEvent('getItems.post', $this->_adapter, new ArrayObject(), $values);
127+
$args = new ArrayObject(['keys' => array_keys($values) + ['missing']]);
128+
$event = new PostEvent('getItems.post', $this->_adapter, $args, $values);
112129

113130
$this->_plugin->onReadItemsPost($event);
114131

115-
$this->assertFalse($event->propagationIsStopped());
132+
$this->assertFalse($event->propagationIsStopped(), 'Event propagation has been stopped');
116133

117134
$values = $event->getResult();
118-
$this->assertSame(123, $values['key1']);
119-
$this->assertSame(456, $values['key2']);
135+
$this->assertSame(123, $values['key1'], "Item 'key1' was not unserialized");
136+
$this->assertSame(456, $values['key2'], "Item 'key2' was not unserialized");
137+
$this->assertArrayNotHasKey('missing', $values, 'Missing item should not be present in the result');
120138
}
121139
}

0 commit comments

Comments
 (0)