summaryrefslogtreecommitdiff
path: root/ext/standard/php_var.h
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2007-05-22 14:34:23 +0000
committerAntony Dovgal <tony2001@php.net>2007-05-22 14:34:23 +0000
commita69e6e2c79d04519112003715ef1665014c0204d (patch)
tree194910551712d46f6630de8458d26bcd9c697cff /ext/standard/php_var.h
parentb4eb20c8aad4c4911e6805bed86332b70b3689a1 (diff)
downloadphp-git-a69e6e2c79d04519112003715ef1665014c0204d.tar.gz
MFH: improve variable name checks
add more tests
Diffstat (limited to 'ext/standard/php_var.h')
-rw-r--r--ext/standard/php_var.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h
index 1b6f180366..6043f4317c 100644
--- a/ext/standard/php_var.h
+++ b/ext/standard/php_var.h
@@ -67,4 +67,48 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hash);
PHPAPI zend_class_entry *php_create_empty_class(char *class_name, int len);
+static inline int php_varname_check(char *name, int name_len, zend_bool silent TSRMLS_DC) /* {{{ */
+{
+ if (name_len == sizeof("GLOBALS") && !memcmp(name, "GLOBALS", sizeof("GLOBALS"))) {
+ if (!silent) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempted GLOBALS variable overwrite");
+ }
+ return FAILURE;
+ } else if (name[0] == '_' &&
+ (
+ (name_len == sizeof("_GET") && !memcmp(name, "_GET", sizeof("_GET"))) ||
+ (name_len == sizeof("_POST") && !memcmp(name, "_POST", sizeof("_POST"))) ||
+ (name_len == sizeof("_COOKIE") && !memcmp(name, "_COOKIE", sizeof("_COOKIE"))) ||
+ (name_len == sizeof("_ENV") && !memcmp(name, "_ENV", sizeof("_ENV"))) ||
+ (name_len == sizeof("_SERVER") && !memcmp(name, "_SERVER", sizeof("_SERVER"))) ||
+ (name_len == sizeof("_SESSION") && !memcmp(name, "_SESSION", sizeof("_SESSION"))) ||
+ (name_len == sizeof("_FILES") && !memcmp(name, "_FILES", sizeof("_FILES"))) ||
+ (name_len == sizeof("_REQUEST") && !memcmp(name, "_REQUEST", sizeof("_REQUEST")))
+ )
+ ) {
+ if (!silent) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempted super-global (%s) variable overwrite", name);
+ }
+ return FAILURE;
+ } else if (name[0] == 'H' &&
+ (
+ (name_len == sizeof("HTTP_POST_VARS") && !memcmp(name, "HTTP_POST_VARS", sizeof("HTTP_POST_VARS"))) ||
+ (name_len == sizeof("HTTP_GET_VARS") && !memcmp(name, "HTTP_GET_VARS", sizeof("HTTP_GET_VARS"))) ||
+ (name_len == sizeof("HTTP_COOKIE_VARS") && !memcmp(name, "HTTP_COOKIE_VARS", sizeof("HTTP_COOKIE_VARS"))) ||
+ (name_len == sizeof("HTTP_ENV_VARS") && !memcmp(name, "HTTP_ENV_VARS", sizeof("HTTP_ENV_VARS"))) ||
+ (name_len == sizeof("HTTP_SERVER_VARS") && !memcmp(name, "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"))) ||
+ (name_len == sizeof("HTTP_SESSION_VARS") && !memcmp(name, "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"))) ||
+ (name_len == sizeof("HTTP_RAW_POST_DATA") && !memcmp(name, "HTTP_RAW_POST_DATA", sizeof("HTTP_RAW_POST_DATA"))) ||
+ (name_len == sizeof("HTTP_POST_FILES") && !memcmp(name, "HTTP_POST_FILES", sizeof("HTTP_POST_FILES")))
+ )
+ ) {
+ if (!silent) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempted long input array (%s) overwrite", name);
+ }
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+/* }}} */
+
#endif /* PHP_VAR_H */