Skip to content

Commit 7f31d86

Browse files
committed
The key length check was not taking the prefix into account
1 parent dfd038f commit 7f31d86

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

php_memcached.c

+14-1
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,19 @@ zend_bool s_memc_valid_key_binary(zend_string *key)
230230
return memchr(ZSTR_VAL(key), '\n', ZSTR_LEN(key)) == NULL;
231231
}
232232

233+
static
234+
uint32_t s_memc_object_key_max_length(php_memc_object_t *intern) {
235+
memcached_return retval;
236+
char *result;
237+
238+
result = memcached_callback_get(intern->memc, MEMCACHED_CALLBACK_PREFIX_KEY, &retval);
239+
if (retval == MEMCACHED_SUCCESS && result) {
240+
return MEMC_OBJECT_KEY_MAX_LENGTH - strlen(result);
241+
} else {
242+
return MEMC_OBJECT_KEY_MAX_LENGTH;
243+
}
244+
}
245+
233246
static
234247
zend_bool s_memc_valid_key_ascii(zend_string *key)
235248
{
@@ -245,7 +258,7 @@ zend_bool s_memc_valid_key_ascii(zend_string *key)
245258

246259
#define MEMC_CHECK_KEY(intern, key) \
247260
if (UNEXPECTED(ZSTR_LEN(key) == 0 || \
248-
ZSTR_LEN(key) > MEMC_OBJECT_KEY_MAX_LENGTH || \
261+
ZSTR_LEN(key) > s_memc_object_key_max_length(intern) || \
249262
(memcached_behavior_get(intern->memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) \
250263
? !s_memc_valid_key_binary(key) \
251264
: !s_memc_valid_key_ascii(key) \

0 commit comments

Comments
 (0)