Skip to content

Instantly share code, notes, and snippets.

@ieatkillerbees
Created March 16, 2015 18:59
Show Gist options
  • Select an option

  • Save ieatkillerbees/9b0c77c4685a5279187d to your computer and use it in GitHub Desktop.

Select an option

Save ieatkillerbees/9b0c77c4685a5279187d to your computer and use it in GitHub Desktop.
napkin code, memcached key validation
*** clean/memcached-2.2.0/php_memcached.c 2014-04-01 10:23:39.000000000 +0000
--- memcached-2.2.0/php_memcached.c 2015-03-16 18:54:46.447761473 +0000
***************
*** 34,39 ****
--- 34,41 ----
#include "fastlz/fastlz.h"
#include <zlib.h>
+ #include <ctype.h>
+
#ifdef HAVE_JSON_API
# include "ext/json/php_json.h"
#endif
***************
*** 394,399 ****
--- 396,416 ----
return le_memc;
}
+ static int php_memc_valid_key(char *key)
+ {
+ if (!*key) {
+ return 0;
+ }
+
+ for ( ; *key; ++key) {
+ if (!isprint(*key) || isspace(*key)) {
+ return 0;
+ }
+ }
+
+ return 1;
+ }
+
/* {{{ Memcached::__construct([string persistent_id[, callback on_new[, string connection_str]]]))
Creates a Memcached object, optionally using persistent memcache connection */
static PHP_METHOD(Memcached, __construct)
***************
*** 573,579 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || strchr(key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FROM_GET;
}
--- 590,596 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || !php_memc_valid_key(key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FROM_GET;
}
***************
*** 1445,1451 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || strchr(key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
--- 1462,1468 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || !php_memc_valid_key(key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
***************
*** 1596,1602 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || strchr(key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
--- 1613,1619 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || !php_memc_valid_key(key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
***************
*** 1714,1720 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || strchr(key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
--- 1731,1737 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || !php_memc_valid_key(key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
***************
*** 1814,1820 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || strchr(key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
--- 1831,1837 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (key_len == 0 || !php_memc_valid_key(key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
***************
*** 2061,2067 ****
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (server_key_len == 0 || strchr(server_key, ' ')) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
--- 2078,2084 ----
MEMC_METHOD_FETCH_OBJECT;
i_obj->rescode = MEMCACHED_SUCCESS;
! if (server_key_len == 0 || !php_memc_valid_key(server_key)) {
i_obj->rescode = MEMCACHED_BAD_KEY_PROVIDED;
RETURN_FALSE;
}
Only in memcached-2.2.0/: php_memcached.lo
diff -c clean/memcached-2.2.0/php_memcached_private.h memcached-2.2.0/php_memcached_private.h
*** clean/memcached-2.2.0/php_memcached_private.h 2014-04-01 10:23:39.000000000 +0000
--- memcached-2.2.0/php_memcached_private.h 2015-03-16 18:44:41.415743561 +0000
***************
*** 189,194 ****
--- 189,195 ----
} memcached_sess;
int php_memc_sess_list_entry(void);
+ int php_memc_valid_char(char *);
char *php_memc_printable_func (zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TSRMLS_DC);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment