Skip to content

Commit

Permalink
Do some basic key validation.
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrei Zmievski committed Jan 16, 2009
1 parent a9489c9 commit 857ff85
Showing 1 changed file with 41 additions and 4 deletions.
45 changes: 41 additions & 4 deletions php_memcached.c
Expand Up @@ -18,8 +18,6 @@

/* TODO
* - check for key length in setters (maybe)
* - throw an exception if cas fails due to token mismatch
* - figure out append/prepend and compressed/serialized data problems
*/

#ifdef HAVE_CONFIG_H
Expand Down Expand Up @@ -281,6 +279,11 @@ static void php_memc_get_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
}
}

if (key_len == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}

MEMC_METHOD_FETCH_OBJECT;
MEMC_G(rescode) = MEMCACHED_SUCCESS;

Expand Down Expand Up @@ -432,12 +435,19 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
zend_hash_get_current_data(Z_ARRVAL_P(keys), (void**)&entry) == SUCCESS;
zend_hash_move_forward(Z_ARRVAL_P(keys))) {

if (Z_TYPE_PP(entry) == IS_STRING) {
if (Z_TYPE_PP(entry) == IS_STRING && Z_STRLEN_PP(entry) > 0) {
mkeys[i] = Z_STRVAL_PP(entry);
mkeys_len[i] = Z_STRLEN_PP(entry);
i++;
}
}

if (i == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
efree(mkeys);
efree(mkeys_len);
RETURN_FALSE;
}

if (cas_tokens) {
orig_cas_flag = memcached_behavior_get(i_obj->memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS);
Expand Down Expand Up @@ -551,13 +561,20 @@ static void php_memc_getDelayed_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_
zend_hash_get_current_data(Z_ARRVAL_P(keys), (void**)&entry) == SUCCESS;
zend_hash_move_forward(Z_ARRVAL_P(keys))) {

if (Z_TYPE_PP(entry) == IS_STRING) {
if (Z_TYPE_PP(entry) == IS_STRING && Z_STRLEN_PP(entry) > 0) {
mkeys[i] = Z_STRVAL_PP(entry);
mkeys_len[i] = Z_STRLEN_PP(entry);
i++;
}
}

if (i == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
efree(mkeys);
efree(mkeys_len);
RETURN_FALSE;
}

if (with_cas) {
orig_cas_flag = memcached_behavior_get(i_obj->memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS);
memcached_behavior_set(i_obj->memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, 1);
Expand Down Expand Up @@ -892,6 +909,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
server_key_len = key_len;
}

if (key_len == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}

MEMC_METHOD_FETCH_OBJECT;
MEMC_G(rescode) = MEMCACHED_SUCCESS;

Expand Down Expand Up @@ -995,6 +1017,11 @@ static void php_memc_cas_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
server_key_len = key_len;
}

if (key_len == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}

MEMC_METHOD_FETCH_OBJECT;
MEMC_G(rescode) = MEMCACHED_SUCCESS;

Expand Down Expand Up @@ -1059,6 +1086,11 @@ static void php_memc_delete_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
server_key_len = key_len;
}

if (key_len == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}

MEMC_METHOD_FETCH_OBJECT;
MEMC_G(rescode) = MEMCACHED_SUCCESS;

Expand Down Expand Up @@ -1101,6 +1133,11 @@ static void php_memc_incdec_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool incr)
return;
}

if (key_len == 0) {
MEMC_G(rescode) = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}

if (offset < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "offset has to be > 0");
RETURN_FALSE;
Expand Down

0 comments on commit 857ff85

Please sign in to comment.