Browse Source

[core] perf: simple, quick buffer_clear()

quickly clear buffer instead of buffer_string_set_length(b, 0) or
buffer_reset(b).  Avoids free() of large buffers about to be reused,
or buffers that are module-scoped, persistent, and reused.

(buffer_reset() should still be used with buffers in connection *con
 when the data in the buffers is supplied by external, untrusted source)
personal/stbuehler/fix-fdevent
Glenn Strauss 3 years ago
parent
commit
f69bd9cdb8
  1. 11
      src/buffer.h
  2. 6
      src/chunk.c
  3. 2
      src/configfile-glue.c
  4. 5
      src/configfile.c
  5. 2
      src/configparser.y
  6. 6
      src/connections-glue.c
  7. 13
      src/connections.c
  8. 6
      src/data_config.c
  9. 2
      src/data_integer.c
  10. 3
      src/etag.c
  11. 6
      src/gw_backend.c
  12. 10
      src/http-header-glue.c
  13. 2
      src/http_chunk.c
  14. 2
      src/keyvalue.c
  15. 2
      src/log.c
  16. 12
      src/mod_accesslog.c
  17. 4
      src/mod_authn_ldap.c
  18. 2
      src/mod_cgi.c
  19. 12
      src/mod_cml.c
  20. 2
      src/mod_cml_lua.c
  21. 8
      src/mod_compress.c
  22. 4
      src/mod_deflate.c
  23. 4
      src/mod_dirlisting.c
  24. 2
      src/mod_evhost.c
  25. 2
      src/mod_expire.c
  26. 6
      src/mod_extforward.c
  27. 6
      src/mod_fastcgi.c
  28. 2
      src/mod_magnet.c
  29. 2
      src/mod_mysql_vhost.c
  30. 2
      src/mod_proxy.c
  31. 6
      src/mod_scgi.c
  32. 2
      src/mod_ssi.c
  33. 2
      src/mod_uploadprogress.c
  34. 2
      src/mod_userdir.c
  35. 4
      src/mod_vhostdb_dbi.c
  36. 6
      src/mod_vhostdb_ldap.c
  37. 6
      src/mod_vhostdb_mysql.c
  38. 4
      src/mod_vhostdb_pgsql.c
  39. 6
      src/mod_webdav.c
  40. 16
      src/mod_wstunnel.c
  41. 2
      src/network.c
  42. 1
      src/plugin.c
  43. 4
      src/response.c
  44. 8
      src/server.c
  45. 6
      src/stat_cache.c

11
src/buffer.h

@ -65,6 +65,13 @@ void buffer_commit(buffer *b, size_t size);
*/
void buffer_string_set_length(buffer *b, size_t len);
/* clear buffer
* - invalidate buffer contents
* - unsets used chars but does not modify existing ptr contents
* (b->ptr *is not* set to an empty, '\0'-terminated string "")
*/
static inline void buffer_clear(buffer *b);
void buffer_copy_string(buffer *b, const char *s);
void buffer_copy_string_len(buffer *b, const char *s, size_t s_len);
void buffer_copy_buffer(buffer *b, const buffer *src);
@ -206,4 +213,8 @@ static inline void buffer_append_slash(buffer *b) {
if (len > 0 && '/' != b->ptr[len-1]) BUFFER_APPEND_STRING_CONST(b, "/");
}
static inline void buffer_clear(buffer *b) {
b->used = 0;
}
#endif

6
src/chunk.c

@ -99,7 +99,7 @@ static void chunk_reset_file_chunk(chunk *c) {
static void chunk_reset(chunk *c) {
if (c->type == FILE_CHUNK) chunk_reset_file_chunk(c);
buffer_string_set_length(c->mem, 0);
buffer_clear(c->mem);
c->offset = 0;
}
@ -134,7 +134,7 @@ void chunk_buffer_release(buffer *b) {
c->mem = b;
c->next = chunks;
chunks = c;
buffer_string_set_length(b, 0);
buffer_clear(b);
}
else {
buffer_free(b);
@ -426,7 +426,7 @@ void chunkqueue_use_memory(chunkqueue *cq, size_t len) {
/* unused buffer: can't remove chunk easily from
* end of list, so just reset the buffer
*/
buffer_string_set_length(b, 0);
buffer_clear(b);
}
}

2
src/configfile-glue.c

@ -430,7 +430,7 @@ static cond_result_t config_check_cond_nocache(server *srv, connection *con, dat
break;
case COMP_HTTP_REQUEST_METHOD:
l = srv->tmp_buf;
buffer_string_set_length(l, 0);
buffer_clear(l);
http_method_append(l, con->request.http_method);
break;
default:

5
src/configfile.c

@ -1445,7 +1445,7 @@ int config_parse_cmd(server *srv, config_t *context, const char *cmd) {
pid_t wpid;
int wstatus;
buffer *out = srv->tmp_buf;
buffer_string_set_length(out, 0);
buffer_clear(out);
close(fds[1]);
fds[1] = -1;
do {
@ -1592,11 +1592,10 @@ int config_set_defaults(server *srv) {
if (srv->srvconf.upload_tempdirs->used) {
buffer * const b = srv->tmp_buf;
size_t len;
buffer_clear(b);
if (!buffer_string_is_empty(srv->srvconf.changeroot)) {
buffer_copy_buffer(b, srv->srvconf.changeroot);
buffer_append_slash(b);
} else {
buffer_reset(b);
}
len = buffer_string_length(b);

2
src/configparser.y

@ -53,7 +53,7 @@ static data_unset *configparser_get_variable(config_t *ctx, const buffer *key) {
#endif
if (NULL != (du = array_get_element_klen(dc->value, CONST_BUF_LEN(key)))) {
du = du->fn->copy(du);
buffer_reset(du->key);
buffer_clear(du->key);
return du;
}
}

6
src/connections-glue.c

@ -494,11 +494,11 @@ void connection_response_reset(server *srv, connection *con) {
con->file_started = 0;
con->response.keep_alive = 0;
if (con->physical.path) { /*(skip for mod_fastcgi authorizer)*/
buffer_reset(con->physical.doc_root);
buffer_clear(con->physical.doc_root);
buffer_reset(con->physical.path);
buffer_reset(con->physical.basedir);
buffer_clear(con->physical.basedir);
buffer_reset(con->physical.rel_path);
buffer_reset(con->physical.etag);
buffer_clear(con->physical.etag);
}
con->response.htags = 0;
array_reset_data_strings(con->response.headers);

13
src/connections.c

@ -610,7 +610,7 @@ int connection_reset(server *srv, connection *con) {
con->request.http_version = HTTP_VERSION_UNSET;
#define CLEAN(x) \
if (con->x) buffer_reset(con->x);
buffer_reset(con->x);
CLEAN(request.uri);
CLEAN(request.request_line);
@ -631,16 +631,7 @@ int connection_reset(server *srv, connection *con) {
/*CLEAN(proto);*//* set to default in connection_accepted() */
#undef CLEAN
#define CLEAN(x) \
if (con->x) con->x->used = 0;
#undef CLEAN
#define CLEAN(x) \
con->request.x = NULL;
CLEAN(http_host);
#undef CLEAN
con->request.http_host = NULL;
con->request.content_length = 0;
con->request.te_chunked = 0;
con->request.htags = 0;

6
src/data_config.c

@ -49,9 +49,9 @@ static void data_config_reset(data_unset *d) {
data_config *ds = (data_config *)d;
/* reused array elements */
buffer_reset(ds->key);
buffer_reset(ds->comp_tag);
buffer_reset(ds->comp_key);
buffer_clear(ds->key);
buffer_clear(ds->comp_tag);
buffer_clear(ds->comp_key);
array_reset(ds->value);
}

2
src/data_integer.c

@ -28,7 +28,7 @@ static void data_integer_reset(data_unset *d) {
data_integer *ds = (data_integer *)d;
/* reused integer elements */
buffer_reset(ds->key);
buffer_clear(ds->key);
ds->value = 0;
}

3
src/etag.c

@ -146,7 +146,7 @@ int etag_is_equal(buffer *etag, const char *line, int weak_ok) {
int etag_create(buffer *etag, struct stat *st,etag_flags_t flags) {
if (0 == flags) return 0;
buffer_reset(etag);
buffer_clear(etag);
if (flags & ETAG_USE_INODE) {
buffer_append_int(etag, st->st_ino);
@ -172,7 +172,6 @@ int etag_mutate(buffer *mut, buffer *etag) {
len = buffer_string_length(etag);
for (h=0, i=0; i < len; ++i) h = (h<<5)^(h>>27)^(etag->ptr[i]);
buffer_reset(mut);
buffer_copy_string_len(mut, CONST_STR_LEN("\""));
buffer_append_int(mut, h);
buffer_append_string_len(mut, CONST_STR_LEN("\""));

6
src/gw_backend.c

@ -1113,7 +1113,7 @@ static void handler_ctx_clear(gw_handler_ctx *hctx) {
if (hctx->wb) chunkqueue_reset(hctx->wb);
hctx->wb_reqlen = 0;
if (hctx->response) buffer_string_set_length(hctx->response, 0);
if (hctx->response) buffer_clear(hctx->response);
hctx->fd = -1;
hctx->fde_ndx = -1;
@ -1279,7 +1279,7 @@ int gw_set_defaults_backend(server *srv, gw_plugin_data *p, data_unset *du, size
}
host = gw_host_init();
buffer_reset(gw_mode);
buffer_clear(gw_mode);
buffer_copy_buffer(host->id, da_host->key);
@ -2377,7 +2377,7 @@ handler_t gw_check_extension(server *srv, connection *con, gw_plugin_data *p, in
if (host->fix_root_path_name && extension->key->ptr[0] == '/'
&& extension->key->ptr[1] == '\0'){
buffer_copy_buffer(con->request.pathinfo, con->uri.path);
buffer_string_set_length(con->uri.path, 0);
buffer_clear(con->uri.path);
} else if (extension->key->ptr[0] == '/'
&& buffer_string_length(con->uri.path)
> buffer_string_length(extension->key)

10
src/http-header-glue.c

@ -98,7 +98,7 @@ buffer * strftime_cache_get(server *srv, time_t last_mod) {
srv->mtime_cache[i].mtime = last_mod;
tm = gmtime(&(srv->mtime_cache[i].mtime));
buffer_string_set_length(srv->mtime_cache[i].str, 0);
buffer_clear(srv->mtime_cache[i].str);
buffer_append_strftime(srv->mtime_cache[i].str, "%a, %d %b %Y %H:%M:%S GMT", tm);
return srv->mtime_cache[i].str;
@ -1103,7 +1103,7 @@ handler_t http_response_parse_headers(server *srv, connection *con, http_respons
&& NULL != (vb = http_header_response_get(con, HTTP_HEADER_OTHER, CONST_STR_LEN("X-Sendfile2")))) {
http_response_xsendfile2(srv, con, vb, opts->xsendfile_docroot);
/* http_header_response_unset() shortcut for HTTP_HEADER_OTHER */
buffer_reset(vb); /*(do not send to client)*/
buffer_clear(vb); /*(do not send to client)*/
if (con->mode == DIRECT) con->file_started = 0;
return HANDLER_FINISHED;
} else if (NULL != (vb = http_header_response_get(con, HTTP_HEADER_OTHER, CONST_STR_LEN("X-Sendfile")))
@ -1111,7 +1111,7 @@ handler_t http_response_parse_headers(server *srv, connection *con, http_respons
&& NULL != (vb = http_header_response_get(con, HTTP_HEADER_OTHER, CONST_STR_LEN("X-LIGHTTPD-send-file"))))) {
http_response_xsendfile(srv, con, vb, opts->xsendfile_docroot);
/* http_header_response_unset() shortcut for HTTP_HEADER_OTHER */
buffer_reset(vb); /*(do not send to client)*/
buffer_clear(vb); /*(do not send to client)*/
if (con->mode == DIRECT) con->file_started = 0;
return HANDLER_FINISHED;
}
@ -1224,14 +1224,14 @@ handler_t http_response_read(server *srv, connection *con, http_response_opts *o
handler_t rc = http_response_parse_headers(srv, con, opts, b);
if (rc != HANDLER_GO_ON) return rc;
/* accumulate response in b until headers completed (or error) */
if (con->file_started) buffer_string_set_length(b, 0);
if (con->file_started) buffer_clear(b);
} else {
if (0 != http_chunk_append_buffer(srv, con, b)) {
/* error writing to tempfile;
* truncate response or send 500 if nothing sent yet */
return HANDLER_ERROR;
}
buffer_string_set_length(b, 0);
buffer_clear(b);
}
if ((con->conf.stream_response_body & FDEVENT_STREAM_RESPONSE_BUFMIN)

2
src/http_chunk.c

@ -23,7 +23,7 @@
#include <string.h>
static buffer * http_chunk_header(buffer *b, uintmax_t len) {
buffer_string_set_length(b, 0);
buffer_clear(b);
buffer_append_uint_hex(b, len);
buffer_append_string_len(b, CONST_STR_LEN("\r\n"));
return b;

2
src/keyvalue.c

@ -270,7 +270,7 @@ static void pcre_keyvalue_buffer_subst(buffer *b, const buffer *patternb, const
/* search for $... or %... pattern substitutions */
buffer_string_set_length(b, 0);
buffer_clear(b);
for (size_t k = 0; k + 1 < pattern_len; ++k) {
if (pattern[k] == '$' || pattern[k] == '%') {

2
src/log.c

@ -123,7 +123,7 @@ static int log_buffer_prepare(buffer *b, server *srv, const char *filename, unsi
if (-1 == srv->errorlog_fd) return -1;
/* cache the generated timestamp */
if (srv->cur_ts != srv->last_generated_debug_ts) {
buffer_string_set_length(srv->ts_debug_str, 0);
buffer_clear(srv->ts_debug_str);
buffer_append_strftime(srv->ts_debug_str, "%Y-%m-%d %H:%M:%S", localtime(&(srv->cur_ts)));
srv->last_generated_debug_ts = srv->cur_ts;

12
src/mod_accesslog.c

@ -679,7 +679,7 @@ static void log_access_flush(server *srv, void *p_d) {
accesslog_write_all(srv, s->access_logfile, s->log_access_fd, CONST_BUF_LEN(s->access_logbuffer));
}
buffer_reset(s->access_logbuffer);
buffer_clear(s->access_logbuffer);
}
}
}
@ -781,10 +781,6 @@ REQUESTDONE_FUNC(log_access_write) {
b = p->conf.access_logbuffer;
}
if (buffer_is_empty(b)) {
buffer_string_set_length(b, 0);
}
for (j = 0; j < p->conf.parsed_format->used; j++) {
const format_field * const f = p->conf.parsed_format->ptr[j];
switch(f->type) {
@ -882,7 +878,7 @@ REQUESTDONE_FUNC(log_access_write) {
# endif /* HAVE_GMTIME_R */
#endif /* HAVE_STRUCT_TM_GMTOFF */
buffer_string_set_length(p->conf.ts_accesslog_str, 0);
buffer_clear(p->conf.ts_accesslog_str);
if (buffer_string_is_empty(f->string)) {
#if defined(HAVE_STRUCT_TM_GMTOFF)
@ -1131,9 +1127,9 @@ REQUESTDONE_FUNC(log_access_write) {
if (!buffer_string_is_empty(b)) {
/*(syslog appends a \n on its own)*/
syslog(p->conf.syslog_level, "%s", b->ptr);
buffer_reset(b);
}
#endif
buffer_clear(b);
return HANDLER_GO_ON;
}
@ -1145,7 +1141,7 @@ REQUESTDONE_FUNC(log_access_write) {
if (p->conf.log_access_fd >= 0) {
accesslog_write_all(srv, p->conf.access_logfile, p->conf.log_access_fd, CONST_BUF_LEN(b));
}
buffer_reset(b);
buffer_clear(b);
}
return HANDLER_GO_ON;

4
src/mod_authn_ldap.c

@ -93,7 +93,7 @@ static void mod_authn_add_scheme (server *srv, buffer *host)
"ldap://", "ldaps://", "ldapi://", "cldap://"
};
char *b, *e = host->ptr;
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
while (*(b = e)) {
unsigned int j;
while (*b==' '||*b=='\t'||*b=='\r'||*b=='\n'||*b==',') ++b;
@ -611,7 +611,7 @@ static handler_t mod_authn_ldap_basic(server *srv, connection *con, void *p_d, c
}
/* build filter to get DN for uid = username */
buffer_string_set_length(p->ldap_filter, 0);
buffer_clear(p->ldap_filter);
if (*template->ptr == ',') {
/* special-case filter template beginning with ',' to be explicit DN */
buffer_append_string_len(p->ldap_filter, CONST_STR_LEN("uid="));

2
src/mod_cgi.c

@ -425,7 +425,7 @@ static int cgi_recv_response(server *srv, handler_ctx *hctx) {
return HANDLER_FINISHED;
case HANDLER_COMEBACK:
/* hctx->conf.local_redir */
buffer_string_set_length(hctx->response, 0);
buffer_clear(hctx->response);
connection_response_reset(srv, hctx->remote_conn); /*(includes con->http_status = 0)*/
plugins_call_connection_reset(srv, hctx->remote_conn);
/*cgi_connection_close(srv, hctx);*//*(already cleaned up and hctx is now invalid)*/

12
src/mod_cml.c

@ -231,9 +231,9 @@ URIHANDLER_FUNC(mod_cml_power_magnet) {
mod_cml_patch_connection(srv, con, p);
buffer_reset(p->basedir);
buffer_reset(p->baseurl);
buffer_reset(p->trigger_handler);
buffer_clear(p->basedir);
buffer_clear(p->baseurl);
buffer_clear(p->trigger_handler);
if (buffer_string_is_empty(p->conf.power_magnet)) return HANDLER_GO_ON;
@ -285,9 +285,9 @@ URIHANDLER_FUNC(mod_cml_is_handled) {
mod_cml_patch_connection(srv, con, p);
buffer_reset(p->basedir);
buffer_reset(p->baseurl);
buffer_reset(p->trigger_handler);
buffer_clear(p->basedir);
buffer_clear(p->baseurl);
buffer_clear(p->trigger_handler);
if (buffer_string_is_empty(p->conf.ext)) return HANDLER_GO_ON;

2
src/mod_cml_lua.c

@ -162,7 +162,7 @@ int cache_parse_lua(server *srv, connection *con, plugin_data *p, buffer *fn) {
buffer_copy_buffer(b, con->uri.query);
cache_export_get_params(L, get_tbl, b);
buffer_reset(b);
buffer_clear(b);
}
lua_setglobal(L, "get");

8
src/mod_compress.c

@ -204,7 +204,7 @@ SETDEFAULTS_FUNC(mod_compress_setdefaults) {
cv[2].destination = &(s->compress_max_filesize);
cv[3].destination = encodings_arr; /* temp array for allowed encodings list */
cv[4].destination = srv->tmp_buf;
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
p->config_storage[i] = s;
@ -889,13 +889,17 @@ PHYSICALPATH_FUNC(mod_compress_physical) {
/* check if mimetype is in compress-config */
content_type = NULL;
stat_cache_content_type_get(srv, con, con->physical.path, sce);
if (sce->content_type->ptr) {
if (!buffer_is_empty(sce->content_type)) {
char *c;
if ( (c = strchr(sce->content_type->ptr, ';')) != NULL) {
content_type = srv->tmp_buf;
buffer_copy_string_len(content_type, sce->content_type->ptr, c - sce->content_type->ptr);
}
}
else {
content_type = srv->tmp_buf;
buffer_copy_string_len(content_type, CONST_STR_LEN(""));
}
for (m = 0; m < p->conf.compress->used; m++) {
data_string *compress_ds = (data_string *)p->conf.compress->data[m];

4
src/mod_deflate.c

@ -308,7 +308,7 @@ SETDEFAULTS_FUNC(mod_deflate_setdefaults) {
cv[5].destination = &(s->output_buffer_size);
cv[6].destination = &(s->work_block_size);
cv[7].destination = p->tmp_buf;
buffer_string_set_length(p->tmp_buf, 0);
buffer_clear(p->tmp_buf);
p->config_storage[i] = s;
@ -1184,7 +1184,7 @@ CONNECTION_FUNC(mod_deflate_handle_response_start) {
hctx->plugin_data = p;
hctx->compression_type = compression_type;
/* setup output buffer */
buffer_string_set_length(p->tmp_buf, 0);
buffer_clear(p->tmp_buf);
hctx->output = p->tmp_buf;
if (0 != mod_deflate_stream_init(hctx)) {
/*(should not happen unless ENOMEM)*/

4
src/mod_dirlisting.c

@ -326,7 +326,7 @@ SETDEFAULTS_FUNC(mod_dirlisting_set_defaults) {
buffer_copy_string_len(s->show_readme, CONST_STR_LEN("README.txt"));
}
else if (buffer_is_equal_string(s->show_readme, CONST_STR_LEN("disable"))) {
buffer_string_set_length(s->show_readme, 0);
buffer_clear(s->show_readme);
}
}
@ -335,7 +335,7 @@ SETDEFAULTS_FUNC(mod_dirlisting_set_defaults) {
buffer_copy_string_len(s->show_header, CONST_STR_LEN("HEADER.txt"));
}
else if (buffer_is_equal_string(s->show_header, CONST_STR_LEN("disable"))) {
buffer_string_set_length(s->show_header, 0);
buffer_clear(s->show_header);
}
}
}

2
src/mod_evhost.c

@ -294,7 +294,7 @@ static handler_t mod_evhost_uri_handler(server *srv, connection *con, void *p_d)
mod_evhost_parse_host(con, parsed_host, p->tmp_buf);
/* build document-root */
buffer_reset(p->tmp_buf);
buffer_clear(p->tmp_buf);
for (i = 0; i < p->conf.len; i++) {
ptr = p->conf.path_pieces[i]->ptr;

2
src/mod_expire.c

@ -387,7 +387,7 @@ CONNECTION_FUNC(mod_expire_handler) {
/* expires should be at least srv->cur_ts */
if (expires < srv->cur_ts) expires = srv->cur_ts;
buffer_string_set_length(p->expire_tstmp, 0);
buffer_clear(p->expire_tstmp);
buffer_append_strftime(p->expire_tstmp, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(expires)));
/* HTTP/1.0 */

6
src/mod_extforward.c

@ -239,7 +239,7 @@ SETDEFAULTS_FUNC(mod_extforward_set_defaults) {
if (NULL != nm_slash) {
log_error_write(srv, __FILE__, __LINE__, "sbsbs", "ERROR: untrusted CIDR masks are ignored (\"", ds->key, "\" => \"", ds->value, "\")");
}
buffer_reset(ds->value); /* empty is untrusted */
buffer_clear(ds->value); /* empty is untrusted */
continue;
}
if (NULL != nm_slash) {
@ -266,7 +266,7 @@ SETDEFAULTS_FUNC(mod_extforward_set_defaults) {
rc = sock_addr_from_str_numeric(srv, &sm->addr, ds->key->ptr);
*nm_slash = '/';
if (1 != rc) return HANDLER_ERROR;
buffer_reset(ds->value); /* empty is untrusted, e.g. if subnet (incorrectly) appears in X-Forwarded-For */
buffer_clear(ds->value); /* empty is untrusted, e.g. if subnet (incorrectly) appears in X-Forwarded-For */
}
}
}
@ -964,7 +964,7 @@ static handler_t mod_extforward_Forwarded (server *srv, connection *con, plugin_
/* create X-Forwarded-For if not present
* (and at least original connecting IP is a trusted proxy) */
buffer *xff = srv->tmp_buf;
buffer_string_set_length(xff, 0);
buffer_clear(xff);
for (j = 0; j < used; ) {
if (-1 == offsets[j]) { ++j; continue; }
if (3 == offsets[j+1]

6
src/mod_fastcgi.c

@ -254,7 +254,7 @@ static handler_t fcgi_create_env(server *srv, handler_ctx *hctx) {
if (0 != http_cgi_headers(srv, con, &opts, fcgi_env_add, b)) {
con->http_status = 400;
con->mode = DIRECT;
buffer_string_set_length(b, 0);
buffer_clear(b);
chunkqueue_remove_finished_chunks(hctx->wb);
return HANDLER_FINISHED;
} else {
@ -387,7 +387,7 @@ static handler_t fcgi_recv_parse(server *srv, connection *con, struct http_respo
buffer *hdrs = hctx->response;
if (NULL == hdrs) {
hdrs = srv->tmp_buf;
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
}
fastcgi_get_packet_body(hdrs, hctx, &packet);
if (HANDLER_GO_ON != http_response_parse_headers(srv, con, &hctx->opts, hdrs)) {
@ -420,7 +420,7 @@ static handler_t fcgi_recv_parse(server *srv, connection *con, struct http_respo
case FCGI_STDERR:
if (packet.len == 0) break;
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
fastcgi_get_packet_body(srv->tmp_buf, hctx, &packet);
log_error_write_multiline_buffer(srv, __FILE__, __LINE__, srv->tmp_buf, "s",
"FastCGI-stderr:");

2
src/mod_magnet.c

@ -538,7 +538,7 @@ static buffer *magnet_env_get_buffer_by_id(server *srv, connection *con, int id)
case MAGNET_ENV_URI_QUERY: dest = con->uri.query; break;
case MAGNET_ENV_REQUEST_METHOD:
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
http_method_append(srv->tmp_buf, con->request.http_method);
dest = srv->tmp_buf;
break;

2
src/mod_mysql_vhost.c

@ -290,7 +290,7 @@ CONNECTION_FUNC(mod_mysql_vhost_handle_docroot) {
if (buffer_is_equal(c->server_name, con->uri.authority)) goto GO_ON;
/* build and run SQL query */
buffer_string_set_length(p->tmp_buf, 0);
buffer_clear(p->tmp_buf);
for (char *b = p->conf.mysql_query->ptr, *d; *b; b = d+1) {
if (NULL != (d = strchr(b, '?'))) {
/* escape the uri.authority */

2
src/mod_proxy.c

@ -536,7 +536,7 @@ static void proxy_set_Forwarded(connection *con, const unsigned int flags) {
CONST_STR_LEN("Forwarded"),
CONST_STR_LEN("x")); /*(must not be blank for _get below)*/
b = http_header_request_get(con, HTTP_HEADER_FORWARDED, CONST_STR_LEN("Forwarded"));
buffer_string_set_length(b, 0);
buffer_clear(b);
if (NULL != xff) {
/* use X-Forwarded-For contents to seed Forwarded */
char *s = xff->ptr;

6
src/mod_scgi.c

@ -172,7 +172,7 @@ static handler_t scgi_create_env(server *srv, handler_ctx *hctx) {
if (0 != http_cgi_headers(srv, con, &opts, scgi_env_add, b)) {
con->http_status = 400;
con->mode = DIRECT;
buffer_string_set_length(b, 0);
buffer_clear(b);
chunkqueue_remove_finished_chunks(hctx->wb);
return HANDLER_FINISHED;
}
@ -180,7 +180,7 @@ static handler_t scgi_create_env(server *srv, handler_ctx *hctx) {
if (hctx->conf.proto == LI_PROTOCOL_SCGI) {
size_t len;
scgi_env_add(b, CONST_STR_LEN("SCGI"), CONST_STR_LEN("1"));
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
buffer_append_int(srv->tmp_buf, buffer_string_length(b)-10);
buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN(":"));
len = buffer_string_length(srv->tmp_buf);
@ -194,7 +194,7 @@ static handler_t scgi_create_env(server *srv, handler_ctx *hctx) {
if (len > USHRT_MAX) {
con->http_status = 431; /* Request Header Fields Too Large */
con->mode = DIRECT;
buffer_string_set_length(b, 0);
buffer_clear(b);
chunkqueue_remove_finished_chunks(hctx->wb);
return HANDLER_FINISHED;
}

2
src/mod_ssi.c

@ -718,7 +718,7 @@ static int process_ssi_stmt(server *srv, connection *con, handler_ctx *p, const
if (p->if_is_false) break;
b = srv->tmp_buf;
buffer_string_set_length(b, 0);
buffer_clear(b);
for (i = 0; i < p->ssi_vars->used; i++) {
data_string *ds = (data_string *)p->ssi_vars->data[p->ssi_vars->sorted[i]];

2
src/mod_uploadprogress.c

@ -131,7 +131,7 @@ static int connection_map_remove_connection(connection_map *cm, connection *con)
if (cme->con == con) {
/* found connection */
buffer_reset(cme->con_id);
buffer_clear(cme->con_id);
cme->con = NULL;
cm->used--;

2
src/mod_userdir.c

@ -330,7 +330,7 @@ URIHANDLER_FUNC(mod_userdir_docroot_handler) {
}
buffer_copy_buffer(con->physical.path, p->temp_path);
buffer_reset(p->temp_path);
buffer_clear(p->temp_path);
return HANDLER_GO_ON;
}

4
src/mod_vhostdb_dbi.c

@ -169,7 +169,7 @@ static int mod_vhostdb_dbi_query(server *srv, connection *con, void *p_d, buffer
/*(reuse buffer for sql query before generating docroot result)*/
buffer *sqlquery = docroot;
buffer_string_set_length(sqlquery, 0); /*(also resets docroot (alias))*/
buffer_clear(sqlquery); /*(also resets docroot (alias))*/
mod_vhostdb_patch_connection(srv, con, p);
if (NULL == p->conf.vdata) return 0; /*(after resetting docroot)*/
@ -198,7 +198,7 @@ static int mod_vhostdb_dbi_query(server *srv, connection *con, void *p_d, buffer
result = dbi_conn_query(dbconf->dbconn, sqlquery->ptr);
} while (!result && ++retry_count < 2);
buffer_string_set_length(docroot, 0); /*(reset buffer to store result)*/
buffer_clear(docroot); /*(reset buffer to store result)*/
if (!result) {
const char *errmsg;

6
src/mod_vhostdb_ldap.c

@ -57,7 +57,7 @@ static void mod_vhostdb_dbconf_add_scheme (server *srv, buffer *host)
"ldap://", "ldaps://", "ldapi://", "cldap://"
};
char *b, *e = host->ptr;
buffer_string_set_length(srv->tmp_buf, 0);
buffer_clear(srv->tmp_buf);
while (*(b = e)) {
unsigned int j;
while (*b==' '||*b=='\t'||*b=='\r'||*b=='\n'||*b==',') ++b;
@ -381,7 +381,7 @@ static int mod_vhostdb_ldap_query(server *srv, connection *con, void *p_d, buffe
/*(reuse buffer for ldap query before generating docroot result)*/
buffer *filter = docroot;
buffer_string_set_length(filter, 0); /*(also resets docroot (alias))*/
buffer_clear(filter); /*(also resets docroot (alias))*/
mod_vhostdb_patch_connection(srv, con, p);
if (NULL == p->conf.vdata) return 0; /*(after resetting docroot)*/
@ -419,7 +419,7 @@ static int mod_vhostdb_ldap_query(server *srv, connection *con, void *p_d, buffe
"you might have to refine the filter:", filter);
}
buffer_string_set_length(docroot, 0); /*(reset buffer to store result)*/
buffer_clear(docroot); /*(reset buffer to store result)*/
if (0 == count) { /*(no entries found)*/
ldap_msgfree(lm);

6
src/mod_vhostdb_mysql.c

@ -133,7 +133,7 @@ static int mod_vhostdb_mysql_query(server *srv, connection *con, void *p_d, buff
/*(reuse buffer for sql query before generating docroot result)*/
buffer *sqlquery = docroot;
buffer_string_set_length(sqlquery, 0); /*(also resets docroot (alias))*/
buffer_clear(sqlquery); /*(also resets docroot (alias))*/
mod_vhostdb_patch_connection(srv, con, p);
if (NULL == p->conf.vdata) return 0; /*(after resetting docroot)*/
@ -160,11 +160,11 @@ static int mod_vhostdb_mysql_query(server *srv, connection *con, void *p_d, buff
if (mysql_real_query(dbconf->dbconn, CONST_BUF_LEN(sqlquery))) {
log_error_write(srv, __FILE__, __LINE__, "s",
mysql_error(dbconf->dbconn));
buffer_string_set_length(docroot, 0); /*(reset buffer; no result)*/
buffer_clear(docroot); /*(reset buffer; no result)*/
return -1;
}
buffer_string_set_length(docroot, 0); /*(reset buffer to store result)*/
buffer_clear(docroot); /*(reset buffer to store result)*/
result = mysql_store_result(dbconf->dbconn);
cols = mysql_num_fields(result);

4
src/mod_vhostdb_pgsql.c

@ -111,7 +111,7 @@ static int mod_vhostdb_pgsql_query(server *srv, connection *con, void *p_d, buff
/*(reuse buffer for sql query before generating docroot result)*/
buffer *sqlquery = docroot;
buffer_string_set_length(sqlquery, 0); /*(also resets docroot (alias))*/
buffer_clear(sqlquery); /*(also resets docroot (alias))*/
mod_vhostdb_patch_connection(srv, con, p);
if (NULL == p->conf.vdata) return 0; /*(after resetting docroot)*/
@ -138,7 +138,7 @@ static int mod_vhostdb_pgsql_query(server *srv, connection *con, void *p_d, buff
res = PQexec(dbconf->dbconn, sqlquery->ptr);
buffer_string_set_length(docroot, 0); /*(reset buffer to store result)*/
buffer_clear(docroot); /*(reset buffer to store result)*/
if (PGRES_TUPLES_OK != PQresultStatus(res)) {
log_error_write(srv, __FILE__, __LINE__, "s",

6
src/mod_webdav.c

@ -983,7 +983,7 @@ static int webdav_get_live_property(server *srv, connection *con, handler_ctx *h
buffer_append_string_len(b, CONST_STR_LEN("<D:getetag>"));
buffer_append_string_buffer(b, con->physical.etag);
buffer_append_string_len(b, CONST_STR_LEN("</D:getetag>"));
buffer_reset(con->physical.etag);
buffer_clear(con->physical.etag);
found = 1;
#ifdef USE_LOCKS
} else if (0 == strcmp(prop_name, "lockdiscovery")) {
@ -1527,8 +1527,8 @@ SUBREQUEST_FUNC(mod_webdav_subrequest_handler_huge) {
buffer_append_string(d.path, de->d_name);
buffer_append_string(d.rel_path, de->d_name);
buffer_reset(prop_200);
buffer_reset(prop_404);
buffer_clear(prop_200);
buffer_clear(prop_404);
webdav_get_props(srv, con, hctx, &d, req_props, prop_200, prop_404);

16
src/mod_wstunnel.c

@ -274,7 +274,7 @@ SETDEFAULTS_FUNC(mod_wstunnel_set_defaults) {
if (!buffer_is_empty(s->frame_type)
&& !buffer_is_equal_caseless_string(s->frame_type,
CONST_STR_LEN("binary"))) {
buffer_reset(s->frame_type);
buffer_clear(s->frame_type);
}
if (!array_is_vlist(s->origins)) {
@ -347,7 +347,7 @@ static handler_t wstunnel_recv_parse(server *srv, connection *con, http_response
DEBUG_LOG(MOD_WEBSOCKET_LOG_ERR, "s", "fail to send data to client");
return HANDLER_ERROR;
}
buffer_string_set_length(b, 0);
buffer_clear(b);
UNUSED(srv);
UNUSED(con);
return HANDLER_GO_ON;
@ -844,7 +844,7 @@ static int create_response_rfc_6455(handler_ctx *hctx) {
#endif
value = hctx->srv->tmp_buf;
buffer_string_set_length(value, 0);
buffer_clear(value);
buffer_append_base64_encode(value, sha_digest, SHA_DIGEST_LENGTH, BASE64_STANDARD);
http_header_response_set(con, HTTP_HEADER_OTHER,
CONST_STR_LEN("Sec-WebSocket-Accept"),
@ -1025,7 +1025,7 @@ static int recv_ietf_00(handler_ctx *hctx) {
&& !buffer_is_empty(payload)) {
hctx->frame.ctl.siz = 0;
chunkqueue_append_buffer(hctx->gw.wb, payload);
buffer_string_set_length(payload, 0);
buffer_clear(payload);
}
else {
if (hctx->frame.state == MOD_WEBSOCKET_FRAME_STATE_INIT
@ -1043,7 +1043,7 @@ static int recv_ietf_00(handler_ctx *hctx) {
"fail to base64-decode");
return -1;
}
buffer_string_set_length(payload, 0);
buffer_clear(payload);
/*chunkqueue_use_memory()*/
hctx->gw.wb->bytes_in += buffer_string_length(b)-len;
}
@ -1304,7 +1304,7 @@ static int recv_rfc_6455(handler_ctx *hctx) {
{
unmask_payload(hctx);
chunkqueue_append_buffer(hctx->gw.wb, payload);
buffer_string_set_length(payload, 0);
buffer_clear(payload);
break;
}
case MOD_WEBSOCKET_FRAME_TYPE_PING:
@ -1313,11 +1313,11 @@ static int recv_rfc_6455(handler_ctx *hctx) {
mod_wstunnel_frame_send(hctx,
MOD_WEBSOCKET_FRAME_TYPE_PONG,
payload->ptr, buffer_string_length(payload));
buffer_string_set_length(payload, 0);
buffer_clear(payload);
}
break;
case MOD_WEBSOCKET_FRAME_TYPE_PONG:
buffer_string_set_length(payload, 0);
buffer_clear(payload);
break;
case MOD_WEBSOCKET_FRAME_TYPE_CLOSE:
default:

2
src/network.c

@ -68,7 +68,7 @@ static handler_t network_server_handle_fdevent(server *srv, void *context, int r
}
static void network_host_normalize_addr_str(buffer *host, sock_addr *addr) {
buffer_reset(host);
buffer_clear(host);
sock_addr_stringify_append_buffer(host, addr);
}

1
src/plugin.c

@ -236,7 +236,6 @@ int plugins_load(server *srv) {
}
#endif
buffer_reset(srv->tmp_buf);
buffer_copy_string(srv->tmp_buf, module);
buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN("_plugin_init"));

4
src/response.c

@ -86,10 +86,8 @@ int http_response_write_header(server *srv, connection *con) {
/* cache the generated timestamp */
if (srv->cur_ts != srv->last_generated_date_ts) {
buffer_string_set_length(srv->ts_date_str, 0);
buffer_clear(srv->ts_date_str);
buffer_append_strftime(srv->ts_date_str, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(srv->cur_ts)));
srv->last_generated_date_ts = srv->cur_ts;
}

8
src/server.c

@ -964,7 +964,7 @@ static void server_graceful_state (server *srv) {
else {
server_sockets_close(srv);
remove_pid_file(srv);
buffer_reset(srv->srvconf.pid_file); /*(prevent more removal attempts)*/
buffer_clear(srv->srvconf.pid_file); /*(prevent more removal attempts)*/
}
}
@ -1067,7 +1067,7 @@ static int server_main (server * const srv, int argc, char **argv) {
}
if (test_config) {
buffer_reset(srv->srvconf.pid_file);
buffer_clear(srv->srvconf.pid_file);
if (1 == test_config) {
printf("Syntax OK\n");
} else { /*(test_config > 1)*/
@ -1090,7 +1090,7 @@ static int server_main (server * const srv, int argc, char **argv) {
graceful_shutdown = 1;
srv->sockets_disabled = 1;
srv->srvconf.dont_daemonize = 1;
buffer_reset(srv->srvconf.pid_file);
buffer_clear(srv->srvconf.pid_file);
if (srv->srvconf.max_worker) {
srv->srvconf.max_worker = 0;
log_error_write(srv, __FILE__, __LINE__, "s",
@ -1631,7 +1631,7 @@ static int server_main (server * const srv, int argc, char **argv) {
close(pid_fd);
pid_fd = -1;
}
buffer_reset(srv->srvconf.pid_file);
buffer_clear(srv->srvconf.pid_file);
fdevent_clr_logger_pipe_pids();
srv->pid = getpid();

6
src/stat_cache.c

@ -546,7 +546,7 @@ const buffer * stat_cache_content_type_get(server *srv, connection *con, const b
if (S_ISREG(sce->st.st_mode)) {
/* determine mimetype */
buffer_reset(sce->content_type);
buffer_clear(sce->content_type);
#if defined(HAVE_XATTR) || defined(HAVE_EXTATTR)
if (con->conf.use_xattr) {
stat_cache_attr_get(sce->content_type, name->ptr, srv->srvconf.xattr_name->ptr);
@ -709,9 +709,9 @@ handler_t stat_cache_get_entry(server *srv, connection *con, buffer *name, stat_
} else {
buffer_reset(sce->etag);
buffer_clear(sce->etag);
#if defined(HAVE_XATTR) || defined(HAVE_EXTATTR)
buffer_reset(sce->content_type);
buffer_clear(sce->content_type);
#endif
}

Loading…
Cancel
Save