Skip to content

Commit dc47bf7

Browse files
committed
Fix PECL Bug #18639, double free in getServerByKey.
Bug report and fix, courtesy of Kevin Bowman.
1 parent 55628f2 commit dc47bf7

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

php_memcached.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,12 @@ PHP_METHOD(Memcached, getServerByKey)
18231823
add_assoc_string(return_value, "host", server->hostname, 1);
18241824
add_assoc_long(return_value, "port", server->port);
18251825
add_assoc_long(return_value, "weight", server->weight);
1826-
memcached_server_free(server);
1826+
1827+
/* memcached_server_add(3) states that the server instance is cloned. */
1828+
/* In actuality it is not, possibly a bug in libmemcached 0.40. */
1829+
/* remove server freeing */
1830+
1831+
/* memcached_server_free(server); */
18271832
}
18281833
/* }}} */
18291834

tests/bug_18639.phpt

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Memcached::getServerByKey(): Bug pecl#18639 (Segfault in getServerByKet)
3+
--SKIPIF--
4+
<?php if (!extension_loaded("memcached")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
error_reporting(0);
8+
9+
$m = new Memcached();
10+
$m->addServer('127.0.0.1', 11211);
11+
var_dump($m->set('test', 'test1'));
12+
var_dump($m->getServerByKey('1'));
13+
14+
--EXPECTF--
15+
bool(true)
16+
array(3) {
17+
["host"]=>
18+
string(9) "127.0.0.1"
19+
["port"]=>
20+
int(11211)
21+
["weight"]=>
22+
int(0)
23+
}

0 commit comments

Comments
 (0)