From 7963580d72a358975133f86f01de2d2eab08ba38 Mon Sep 17 00:00:00 2001 From: xXx-caillou-xXx Date: Fri, 13 Jul 2018 10:36:50 +0200 Subject: Massively optimize how rules are handled This commit does a lot of things: - Use hashtables instead of lists to store the rules - Rules that can be applied at launch time won't be tried at runtime - Improve feedback when writing nonsensical rules - Make intensive use of `zend_string` instead of `char*`--- src/sp_upload_validation.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/sp_upload_validation.c') diff --git a/src/sp_upload_validation.c b/src/sp_upload_validation.c index 73244ae..794c61f 100644 --- a/src/sp_upload_validation.c +++ b/src/sp_upload_validation.c @@ -41,12 +41,14 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) { char *cmd[3] = {0}; char *env[5] = {0}; - sp_log_debug("Filename: %s\nTmpname: %s\nSize: %d\nError: %d\nScript: %s", - filename, tmp_name, filesize, - Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)), - SNUFFLEUPAGUS_G(config).config_upload_validation->script); + sp_log_debug( + "Filename: %s\nTmpname: %s\nSize: %d\nError: %d\nScript: %s", + filename, tmp_name, filesize, + Z_LVAL_P(zend_hash_str_find(Z_ARRVAL_P(file), "error", 5)), + ZSTR_VAL(SNUFFLEUPAGUS_G(config).config_upload_validation->script)); - cmd[0] = SNUFFLEUPAGUS_G(config).config_upload_validation->script; + cmd[0] = + ZSTR_VAL(SNUFFLEUPAGUS_G(config).config_upload_validation->script); cmd[1] = tmp_name; cmd[2] = NULL; @@ -58,11 +60,15 @@ int sp_rfc1867_callback(unsigned int event, void *event_data, void **extra) { env[4] = NULL; if ((pid = fork()) == 0) { - if (execve(SNUFFLEUPAGUS_G(config).config_upload_validation->script, - cmd, env) == -1) { - sp_log_err("upload_validation", "Could not call '%s' : %s", - SNUFFLEUPAGUS_G(config).config_upload_validation->script, - strerror(errno)); + if (execve( + ZSTR_VAL( + SNUFFLEUPAGUS_G(config).config_upload_validation->script), + cmd, env) == -1) { + sp_log_err( + "upload_validation", "Could not call '%s' : %s", + ZSTR_VAL( + SNUFFLEUPAGUS_G(config).config_upload_validation->script), + strerror(errno)); EFREE_3(env); exit(1); } -- cgit v1.3