26#ifdef __SANITIZE_ADDRESS__
27# include "sanitizer/lsan_interface.h"
33static const char HARDCODED_INI[] =
36 "output_buffering=0\n"
39 "max_execution_time=0\n"
41 "mbstring.regex_stack_limit=10000\n"
42 "mbstring.regex_retry_limit=10000\n"
45 "allow_url_include=0\n"
48 "disable_functions=dl,mail,mb_send_mail"
49 ",shell_exec,exec,system,proc_open,popen,passthru,pcntl_exec"
50 ",chdir,chgrp,chmod,chown,copy,file_put_contents,lchgrp,lchown,link,mkdir"
51 ",move_uploaded_file,rename,rmdir,symlink,tempname,touch,unlink,fopen"
53 ",fsockopen,pfsockopen"
54 ",stream_socket_pair,stream_socket_client,stream_socket_server"
60 "\ndisable_classes=InfiniteIterator"
68static size_t ub_write(
const char *str,
size_t str_length)
74static void fuzzer_flush(
void *server_context)
83static char* read_cookies(
void)
89static void register_variables(
zval *track_vars_array)
94static void log_message(
const char *message,
int level)
133#ifdef __SANITIZE_ADDRESS__
140 fuzzer_module.phpinfo_as_text = 1;
142 size_t ini_len =
sizeof(HARDCODED_INI);
143 size_t extra_ini_len = extra_ini ?
strlen(extra_ini) : 0;
145 ini_len += extra_ini_len + 1;
147 char *
p = malloc(ini_len + 1);
148 fuzzer_module.ini_entries =
p;
149 p = zend_mempcpy(
p, HARDCODED_INI,
sizeof(HARDCODED_INI) - 1);
152 p = zend_mempcpy(
p, extra_ini, extra_ini_len);
160 putenv(
"USE_ZEND_ALLOC=0");
162 if (fuzzer_module.startup(&fuzzer_module)==
FAILURE) {
166#ifdef __SANITIZE_ADDRESS__
224 if (fuzzer_module.php_ini_path_override) {
225 free(fuzzer_module.php_ini_path_override);
227 fuzzer_module.php_ini_path_override = strdup(
file);
236 free((
void *)fuzzer_module.ini_entries);
241 char *filename,
const char *
data,
size_t data_len,
bool execute,
242 void (*before_shutdown)(
void))
247 SG(request_info).argc=0;
248 SG(request_info).argv=
NULL;
266 file_handle.
len = data_len;
282 CG(compiled_filename) =
NULL;
283 if (before_shutdown) {
315 for(i=0;i<nargs;i++) {
321 for(i=0;i<nargs;i++) {
SAPI_API sapi_module_struct sapi_module
SAPI_API void sapi_startup(sapi_module_struct *sf)
SAPI_API void sapi_shutdown(void)
#define SAPI_OPTION_NO_CHDIR
#define STANDARD_SAPI_MODULE_PROPERTIES
struct _sapi_module_struct sapi_module_struct
putenv(string $assignment)
file(string $filename, int $flags=0, $context=null)
memset(ptr, 0, type->size)
int fuzzer_request_startup(void)
void fuzzer_set_ini_file(const char *file)
void fuzzer_call_php_func(const char *func_name, int nargs, char **params)
void fuzzer_setup_dummy_frame(void)
int fuzzer_do_request_from_buffer(char *filename, const char *data, size_t data_len, bool execute, void(*before_shutdown)(void))
void fuzzer_call_php_func_zval(const char *func_name, int nargs, zval *args)
void fuzzer_request_shutdown(void)
int fuzzer_shutdown_php(void)
int fuzzer_init_php(const char *extra_ini)
void php_request_shutdown(void *dummy)
zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module)
void php_module_shutdown(void)
zend_result php_request_startup(void)
int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals)
PHP_JSON_API size_t int options
PHPAPI void php_var_dump(zval *struc, int level)
PHPAPI void(* php_import_environment_variables)(zval *array_ptr)
PHPAPI void php_register_variable(const char *var, const char *strval, zval *track_vars_array)
#define ZVAL_STRING(z, s)
#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params)
ZEND_API zend_op_array *(* zend_compile_file)(zend_file_handle *file_handle, int type)
ZEND_API void destroy_op_array(zend_op_array *op_array)
#define ZEND_INTERNAL_FUNCTION
struct _zend_op_array zend_op_array
ZEND_API void zend_destroy_static_vars(zend_op_array *op_array)
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle)
ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
union _zend_function zend_function
ZEND_API int zend_gc_collect_cycles(void)
struct _zend_file_handle zend_file_handle
ZEND_API void zend_stream_init_filename(zend_file_handle *handle, const char *filename)
#define ZSTR_EMPTY_ALLOC()
struct _zend_execute_data zend_execute_data
ZEND_API void zval_ptr_dtor(zval *zval_ptr)