1--TEST--
2Bug #70219 Use after free vulnerability in session deserializer
3--SKIPIF--
4<?php
5if (!extension_loaded('session')) die('skip session extension not available');
6?>
7--FILE--
8<?php
9class obj implements Serializable {
10    var $data;
11    function serialize() {
12        return serialize($this->data);
13    }
14    function unserialize($data) {
15        session_start();
16        session_decode($data);
17    }
18}
19
20$inner = 'ryat|a:1:{i:0;a:1:{i:1;';
21$exploit = 'a:2:{i:0;C:3:"obj":'.strlen($inner).':{'.$inner.'}i:1;R:4;}';
22
23$data = unserialize($exploit);
24
25for ($i = 0; $i < 5; $i++) {
26    $v[$i] = 'hi'.$i;
27}
28
29var_dump($data);
30?>
31--EXPECTF--
32Warning: session_decode(): Failed to decode session object. Session has been destroyed in %s on line %d
33
34Notice: unserialize(): Error at offset 55 of 56 bytes in %s on line %d
35bool(false)
36