summaryrefslogtreecommitdiffhomepage
path: root/src/html-error.c
diff options
context:
space:
mode:
authorrofl0r <rofl0r@users.noreply.github.com>2020-09-12 21:33:59 +0100
committerrofl0r <rofl0r@users.noreply.github.com>2020-09-15 23:12:00 +0100
commit155bfbbe87daae596d9c77ea3ee9bf9624afcce0 (patch)
treeb9a4f6a05c039dcb9c4ff08de179cc61faeeae72 /src/html-error.c
parent34a8b28414de419c984f832a299383f6d7149f72 (diff)
replace leftover users of hashmap with htab
also fixes a bug where the ErrorFile directive would create a new hashmap on every added item, effectively allowing only the use of the last specified errornumber, and producing memory leaks on each config reload.
Diffstat (limited to 'src/html-error.c')
-rw-r--r--src/html-error.c51
1 files changed, 32 insertions, 19 deletions
diff --git a/src/html-error.c b/src/html-error.c
index d643aaa..7c71f74 100644
--- a/src/html-error.c
+++ b/src/html-error.c
@@ -40,17 +40,22 @@
int add_new_errorpage (struct config_s *conf, char *filepath,
unsigned int errornum)
{
- char errornbuf[ERRORNUM_BUFSIZE];
+ char errornbuf[ERRORNUM_BUFSIZE], *k;
- conf->errorpages = hashmap_create (ERRPAGES_BUCKETCOUNT);
+ if (!conf->errorpages)
+ conf->errorpages = htab_create (ERRPAGES_BUCKETCOUNT);
if (!conf->errorpages)
return (-1);
snprintf (errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
- if (hashmap_insert (conf->errorpages, errornbuf,
- filepath, strlen (filepath) + 1) < 0)
+ k = safestrdup(errornbuf);
+ if (!k) return -1;
+
+ if (!htab_insert (conf->errorpages, k, HTV_P(filepath))) {
+ safefree(k);
return (-1);
+ }
return (0);
}
@@ -60,10 +65,8 @@ int add_new_errorpage (struct config_s *conf, char *filepath,
*/
static char *get_html_file (unsigned int errornum)
{
- hashmap_iter result_iter;
char errornbuf[ERRORNUM_BUFSIZE];
- char *key;
- char *val;
+ htab_value *hv;
assert (errornum >= 100 && errornum < 1000);
@@ -72,16 +75,15 @@ static char *get_html_file (unsigned int errornum)
snprintf (errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
- result_iter = hashmap_find (config->errorpages, errornbuf);
-
- if (hashmap_is_end (config->errorpages, result_iter))
- return (config->errorpage_undef);
-
- if (hashmap_return_entry (config->errorpages, result_iter,
- &key, (void **) &val) < 0)
- return (config->errorpage_undef);
+ hv = htab_find (config->errorpages, errornbuf);
+ if (!hv) return (config->errorpage_undef);
+ return hv->p;
+}
- return (val);
+static char *lookup_variable (struct htab *map, const char *varname) {
+ htab_value *v;
+ v = htab_find(map, varname);
+ return v ? v->p : 0;
}
static void varsubst_sendline(struct conn_s *connptr, regex_t *re, char *p) {
@@ -203,14 +205,25 @@ int send_http_error_message (struct conn_s *connptr)
int
add_error_variable (struct conn_s *connptr, const char *key, const char *val)
{
+ char *k, *v;
+
if (!connptr->error_variables)
if (!
(connptr->error_variables =
- hashmap_create (ERRVAR_BUCKETCOUNT)))
+ htab_create (ERRVAR_BUCKETCOUNT)))
return (-1);
- return hashmap_insert (connptr->error_variables, key, val,
- strlen (val) + 1);
+ k = safestrdup(key);
+ v = safestrdup(val);
+
+ if (!v || !k) goto oom;
+
+ if(htab_insert (connptr->error_variables, k, HTV_P(v)))
+ return 1;
+oom:;
+ safefree(k);
+ safefree(v);
+ return -1;
}
#define ADD_VAR_RET(x, y) \