Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e2c5125

Browse files
committed
Issue #1048
Add --with-liblzf configure option to use system liblzf. Use exponentially growing buffer for lzf_decompress. Move liblzf files to separeted dir in package.xml.
1 parent 8cb2d5b commit e2c5125

3 files changed

Lines changed: 50 additions & 15 deletions

File tree

config.m4

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ PHP_ARG_ENABLE(redis-igbinary, whether to enable igbinary serializer support,
1414
PHP_ARG_ENABLE(redis-lzf, whether to enable lzf compression,
1515
[ --enable-redis-lzf Enable lzf compression support], no, no)
1616

17+
PHP_ARG_WITH(liblzf, use system liblzf,
18+
[ --with-liblzf[=DIR] Use system liblzf], no, no)
19+
1720
if test "$PHP_REDIS" != "no"; then
1821

1922
if test "$PHP_REDIS_SESSION" != "no"; then
@@ -63,10 +66,35 @@ dnl Check for igbinary
6366
fi
6467

6568
if test "$PHP_REDIS_LZF" != "no"; then
66-
PHP_ADD_INCLUDE(liblzf)
67-
PHP_ADD_BUILD_DIR(liblzf)
68-
lzf_sources="liblzf/lzf_c.c liblzf/lzf_d.c"
6969
AC_DEFINE(HAVE_REDIS_LZF, 1, [ ])
70+
if test "$PHP_LIBLZF" != "no"; then
71+
AC_MSG_CHECKING(for liblzf files in default path)
72+
for i in $PHP_LIBLZF /usr/local /usr; do
73+
if test -r $i/include/lzf.h; then
74+
AC_MSG_RESULT(found in $i)
75+
LIBLZF_DIR=$i
76+
break
77+
fi
78+
done
79+
if test -z "$LIBLZF_DIR"; then
80+
AC_MSG_RESULT([not found])
81+
AC_MSG_ERROR([Please reinstall the liblzf distribution])
82+
fi
83+
PHP_CHECK_LIBRARY(lzf, lzf_compress,
84+
[
85+
PHP_ADD_LIBRARY_WITH_PATH(lzf, $LIBLZF_DIR/lib, LZF_SHARED_LIBADD)
86+
], [
87+
AC_MSG_ERROR([could not find usable liblzf])
88+
], [
89+
-L$LIBLZF_DIR/lib
90+
])
91+
PHP_SUBST(LZF_SHARED_LIBADD)
92+
else
93+
PHP_ADD_INCLUDE(liblzf)
94+
PHP_ADD_INCLUDE($ext_srcdir/liblzf)
95+
PHP_ADD_BUILD_DIR(liblzf)
96+
lzf_sources="liblzf/lzf_c.c liblzf/lzf_d.c"
97+
fi
7098
fi
7199

72100
dnl # --with-redis -> check with-path

library.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include "igbinary/igbinary.h"
1313
#endif
1414
#ifdef HAVE_REDIS_LZF
15-
#include "lzf.h"
15+
#include <lzf.h>
1616
#endif
1717
#include <zend_exceptions.h>
1818
#include "php_redis.h"
@@ -1822,9 +1822,12 @@ redis_unpack(RedisSock *redis_sock, const char *val, int val_len, zval *z_ret TS
18221822
case REDIS_COMPRESSION_LZF:
18231823
#ifdef HAVE_REDIS_LZF
18241824
errno = E2BIG;
1825-
for (i = 1; errno == E2BIG; ++i) {
1825+
/* start from two-times bigger buffer and
1826+
* increase it exponentially if needed */
1827+
for (i = 2; errno == E2BIG; i *= 2) {
18261828
data = emalloc(i * val_len);
18271829
if ((res = lzf_decompress(val, val_len, data, i * val_len)) == 0) {
1830+
/* errno != E2BIG will brake for loop */
18281831
efree(data);
18291832
continue;
18301833
} else if (redis_unserialize(redis_sock, data, res, z_ret TSRMLS_CC) == 0) {

package.xml

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,34 +67,38 @@ http://pear.php.net/dtd/package-2.0.xsd">
6767
</notes>
6868
<contents>
6969
<dir name="/">
70+
<file role='doc' name='COPYING'/>
71+
<file role='doc' name='CREDITS'/>
7072
<file role='doc' name='README.markdown'/>
7173
<file role='doc' name='arrays.markdown'/>
7274
<file role='doc' name='cluster.markdown'/>
73-
<file role='doc' name='CREDITS'/>
74-
<file role='doc' name='COPYING'/>
75+
<file role='src' name='cluster_library.c'/>
76+
<file role='src' name='cluster_library.h'/>
77+
<file role='src' name='common.h'/>
7578
<file role='src' name='config.m4'/>
7679
<file role='src' name='config.w32'/>
77-
<file role='src' name='common.h'/>
80+
<file role='src' name='crc16.h'/>
7881
<file role='src' name='library.c'/>
7982
<file role='src' name='library.h'/>
8083
<file role='src' name='php_redis.h'/>
84+
<file role='src' name='redis.c'/>
8185
<file role='src' name='redis_array.c'/>
8286
<file role='src' name='redis_array.h'/>
8387
<file role='src' name='redis_array_impl.c'/>
8488
<file role='src' name='redis_array_impl.h'/>
8589
<file role='src' name='redis_cluster.c'/>
8690
<file role='src' name='redis_cluster.h'/>
87-
<file role='src' name='cluster_library.c'/>
88-
<file role='src' name='cluster_library.h'/>
8991
<file role='src' name='redis_commands.c'/>
9092
<file role='src' name='redis_commands.h'/>
91-
<file role='src' name='redis.c'/>
92-
<file role='src' name='crc16.h'/>
9393
<file role='src' name='redis_session.c'/>
9494
<file role='src' name='redis_session.h'/>
95-
<file role='src' name='liblzf/lzf.h'/>
96-
<file role='src' name='liblzf/lzf_c.c'/>
97-
<file role='src' name='liblzf/lzf_d.c'/>
95+
<dir name='liblzf'>
96+
<file role='doc' name='LICENSE'/>
97+
<file role='doc' name='README'/>
98+
<file role='src' name='lzf.h'/>
99+
<file role='src' name='lzf_c.c'/>
100+
<file role='src' name='lzf_d.c'/>
101+
</dir> <!-- liblzf -->
98102
<dir name='tests'>
99103
<file role='test' name='RedisArrayTest.php'/>
100104
<file role='test' name='RedisClusterTest.php'/>

0 commit comments

Comments
 (0)