From 33cebeb0f778d437e1a6070504f588b2531fa291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Thu, 14 May 2015 09:38:33 +0000 Subject: [PATCH 28/29] fix segfaults in many plugins if they failed configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Stefan Bühler git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2988 152afb58-edef-0310-8abb-c4023f1b3aa9 --- NEWS | 1 + src/mod_access.c | 2 ++ src/mod_accesslog.c | 2 +- src/mod_alias.c | 2 +- src/mod_auth.c | 2 +- src/mod_cgi.c | 2 ++ src/mod_cml.c | 2 ++ src/mod_compress.c | 2 +- src/mod_evasive.c | 2 ++ src/mod_evhost.c | 2 +- src/mod_expire.c | 3 ++- src/mod_extforward.c | 2 +- src/mod_fastcgi.c | 2 +- src/mod_flv_streaming.c | 2 +- src/mod_indexfile.c | 2 +- src/mod_magnet.c | 2 +- src/mod_proxy.c | 7 +++---- src/mod_redirect.c | 2 ++ src/mod_rewrite.c | 3 +++ src/mod_rrdtool.c | 2 ++ src/mod_scgi.c | 2 +- src/mod_secure_download.c | 2 ++ src/mod_setenv.c | 2 ++ src/mod_skeleton.c | 2 +- src/mod_ssi.c | 2 ++ src/mod_staticfile.c | 2 ++ src/mod_trigger_b4_dl.c | 2 +- src/mod_uploadprogress.c | 2 ++ src/mod_userdir.c | 2 ++ src/mod_usertrack.c | 2 ++ src/mod_webdav.c | 2 +- 31 files changed, 49 insertions(+), 19 deletions(-) diff --git a/NEWS b/NEWS index 4d19144..dd2d1b8 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,7 @@ NEWS * major refactoring of internal buffer/chunk handling * [mod_auth] use crypt_r instead of crypt if available * fix error message for T_CONFIG_ARRAY config values if an entry value is not a string + * fix segfaults in many plugins if they failed configuration - 1.4.35 - 2014-03-12 * [network/ssl] fix build error if TLSEXT is disabled diff --git a/src/mod_access.c b/src/mod_access.c index a6c25a4..e6a9a14 100644 --- a/src/mod_access.c +++ b/src/mod_access.c @@ -40,6 +40,8 @@ FREE_FUNC(mod_access_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->access_deny); free(s); diff --git a/src/mod_accesslog.c b/src/mod_accesslog.c index 9bb3fe2..f5be7d2 100644 --- a/src/mod_accesslog.c +++ b/src/mod_accesslog.c @@ -414,7 +414,7 @@ FREE_FUNC(mod_accesslog_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; if (!buffer_string_is_empty(s->access_logbuffer)) { if (s->log_access_fd != -1) { diff --git a/src/mod_alias.c b/src/mod_alias.c index 4625973..f9d7b51 100644 --- a/src/mod_alias.c +++ b/src/mod_alias.c @@ -45,7 +45,7 @@ FREE_FUNC(mod_alias_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if(!s) continue; + if (NULL == s) continue; array_free(s->alias); diff --git a/src/mod_auth.c b/src/mod_auth.c index 1870893..edddaa8 100644 --- a/src/mod_auth.c +++ b/src/mod_auth.c @@ -60,7 +60,7 @@ FREE_FUNC(mod_auth_free) { for (i = 0; i < srv->config_context->used; i++) { mod_auth_plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->auth_require); buffer_free(s->auth_plain_groupfile); diff --git a/src/mod_cgi.c b/src/mod_cgi.c index 8a7cc2b..01b1877 100644 --- a/src/mod_cgi.c +++ b/src/mod_cgi.c @@ -127,6 +127,8 @@ FREE_FUNC(mod_cgi_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->cgi); free(s); diff --git a/src/mod_cml.c b/src/mod_cml.c index baa23b3..98f8d77 100644 --- a/src/mod_cml.c +++ b/src/mod_cml.c @@ -43,6 +43,8 @@ FREE_FUNC(mod_cml_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + buffer_free(s->ext); buffer_free(s->mc_namespace); diff --git a/src/mod_compress.c b/src/mod_compress.c index f0ffa1c..29d5ab5 100644 --- a/src/mod_compress.c +++ b/src/mod_compress.c @@ -90,7 +90,7 @@ FREE_FUNC(mod_compress_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->compress); buffer_free(s->compress_cache_dir); diff --git a/src/mod_evasive.c b/src/mod_evasive.c index d9b8732..da45c9a 100644 --- a/src/mod_evasive.c +++ b/src/mod_evasive.c @@ -58,6 +58,8 @@ FREE_FUNC(mod_evasive_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + free(s); } free(p->config_storage); diff --git a/src/mod_evhost.c b/src/mod_evhost.c index e728551..3c49adf 100644 --- a/src/mod_evhost.c +++ b/src/mod_evhost.c @@ -46,7 +46,7 @@ FREE_FUNC(mod_evhost_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; if(s->path_pieces) { size_t j; diff --git a/src/mod_expire.c b/src/mod_expire.c index e26c3c6..0794c15 100644 --- a/src/mod_expire.c +++ b/src/mod_expire.c @@ -62,7 +62,8 @@ FREE_FUNC(mod_expire_free) { size_t i; for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + + if (NULL == s) continue; array_free(s->expire_url); free(s); diff --git a/src/mod_extforward.c b/src/mod_extforward.c index 7f77982..557c505 100644 --- a/src/mod_extforward.c +++ b/src/mod_extforward.c @@ -135,7 +135,7 @@ FREE_FUNC(mod_extforward_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->forwarder); array_free(s->headers); diff --git a/src/mod_fastcgi.c b/src/mod_fastcgi.c index d16306c..5be73df 100644 --- a/src/mod_fastcgi.c +++ b/src/mod_fastcgi.c @@ -693,7 +693,7 @@ FREE_FUNC(mod_fastcgi_free) { plugin_config *s = p->config_storage[i]; fcgi_exts *exts; - if (!s) continue; + if (NULL == s) continue; exts = s->exts; diff --git a/src/mod_flv_streaming.c b/src/mod_flv_streaming.c index db041e2..6e92c74 100644 --- a/src/mod_flv_streaming.c +++ b/src/mod_flv_streaming.c @@ -54,7 +54,7 @@ FREE_FUNC(mod_flv_streaming_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->extensions); diff --git a/src/mod_indexfile.c b/src/mod_indexfile.c index 13d18e2..3c57256 100644 --- a/src/mod_indexfile.c +++ b/src/mod_indexfile.c @@ -51,7 +51,7 @@ FREE_FUNC(mod_indexfile_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->indexfiles); diff --git a/src/mod_magnet.c b/src/mod_magnet.c index 8f89d4e..0d99fdf 100644 --- a/src/mod_magnet.c +++ b/src/mod_magnet.c @@ -71,7 +71,7 @@ FREE_FUNC(mod_magnet_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->url_raw); array_free(s->physical_path); diff --git a/src/mod_proxy.c b/src/mod_proxy.c index dfdc636..7821072 100644 --- a/src/mod_proxy.c +++ b/src/mod_proxy.c @@ -167,12 +167,11 @@ FREE_FUNC(mod_proxy_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (s) { + if (NULL == s) continue; - array_free(s->extensions); + array_free(s->extensions); - free(s); - } + free(s); } free(p->config_storage); } diff --git a/src/mod_redirect.c b/src/mod_redirect.c index 615c7db..769c8c8 100644 --- a/src/mod_redirect.c +++ b/src/mod_redirect.c @@ -47,6 +47,8 @@ FREE_FUNC(mod_redirect_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + pcre_keyvalue_buffer_free(s->redirect); free(s); diff --git a/src/mod_rewrite.c b/src/mod_rewrite.c index 5191a64..113cc54 100644 --- a/src/mod_rewrite.c +++ b/src/mod_rewrite.c @@ -146,6 +146,9 @@ FREE_FUNC(mod_rewrite_free) { size_t i; for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + + if (NULL == s) continue; + rewrite_rule_buffer_free(s->rewrite); rewrite_rule_buffer_free(s->rewrite_NF); diff --git a/src/mod_rrdtool.c b/src/mod_rrdtool.c index 0532e4d..6b8cdae 100644 --- a/src/mod_rrdtool.c +++ b/src/mod_rrdtool.c @@ -65,6 +65,8 @@ FREE_FUNC(mod_rrd_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + buffer_free(s->path_rrdtool_bin); buffer_free(s->path_rrd); diff --git a/src/mod_scgi.c b/src/mod_scgi.c index 9e88de3..733b51c 100644 --- a/src/mod_scgi.c +++ b/src/mod_scgi.c @@ -554,7 +554,7 @@ FREE_FUNC(mod_scgi_free) { plugin_config *s = p->config_storage[i]; scgi_exts *exts; - if (!s) continue; + if (NULL == s) continue; exts = s->exts; diff --git a/src/mod_secure_download.c b/src/mod_secure_download.c index da98b61..d85872d 100644 --- a/src/mod_secure_download.c +++ b/src/mod_secure_download.c @@ -65,6 +65,8 @@ FREE_FUNC(mod_secdownload_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + buffer_free(s->secret); buffer_free(s->doc_root); buffer_free(s->uri_prefix); diff --git a/src/mod_setenv.c b/src/mod_setenv.c index 60e9b55..34075c1 100644 --- a/src/mod_setenv.c +++ b/src/mod_setenv.c @@ -67,6 +67,8 @@ FREE_FUNC(mod_setenv_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->request_header); array_free(s->response_header); array_free(s->environment); diff --git a/src/mod_skeleton.c b/src/mod_skeleton.c index 68d272d..8461279 100644 --- a/src/mod_skeleton.c +++ b/src/mod_skeleton.c @@ -79,7 +79,7 @@ FREE_FUNC(mod_skeleton_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; array_free(s->match); diff --git a/src/mod_ssi.c b/src/mod_ssi.c index ed3b75c..07b695d 100644 --- a/src/mod_ssi.c +++ b/src/mod_ssi.c @@ -69,6 +69,8 @@ FREE_FUNC(mod_ssi_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->ssi_extension); buffer_free(s->content_type); diff --git a/src/mod_staticfile.c b/src/mod_staticfile.c index d40aa31..22929bb 100644 --- a/src/mod_staticfile.c +++ b/src/mod_staticfile.c @@ -63,6 +63,8 @@ FREE_FUNC(mod_staticfile_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->exclude_ext); free(s); diff --git a/src/mod_trigger_b4_dl.c b/src/mod_trigger_b4_dl.c index e1fa993..4a3eac2 100644 --- a/src/mod_trigger_b4_dl.c +++ b/src/mod_trigger_b4_dl.c @@ -89,7 +89,7 @@ FREE_FUNC(mod_trigger_b4_dl_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; buffer_free(s->db_filename); buffer_free(s->download_url); diff --git a/src/mod_userdir.c b/src/mod_userdir.c index 682f950..f6f1d8a 100644 --- a/src/mod_userdir.c +++ b/src/mod_userdir.c @@ -60,6 +60,8 @@ FREE_FUNC(mod_userdir_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + array_free(s->include_user); array_free(s->exclude_user); buffer_free(s->path); diff --git a/src/mod_usertrack.c b/src/mod_usertrack.c index 11aad95..3adedcf 100644 --- a/src/mod_usertrack.c +++ b/src/mod_usertrack.c @@ -48,6 +48,8 @@ FREE_FUNC(mod_usertrack_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + buffer_free(s->cookie_name); buffer_free(s->cookie_domain); diff --git a/src/mod_webdav.c b/src/mod_webdav.c index 654108a..2fff8c3 100644 --- a/src/mod_webdav.c +++ b/src/mod_webdav.c @@ -120,7 +120,7 @@ FREE_FUNC(mod_webdav_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; - if (!s) continue; + if (NULL == s) continue; buffer_free(s->sqlite_db_name); #ifdef USE_PROPPATCH -- 2.4.5