diff --git a/include/proto/proto_http.h b/include/proto/proto_http.h index e7ad8ffe1..b65408a06 100644 --- a/include/proto/proto_http.h +++ b/include/proto/proto_http.h @@ -53,6 +53,7 @@ extern const int http_err_codes[HTTP_ERR_SIZE]; extern struct chunk http_err_chunks[HTTP_ERR_SIZE]; extern const char *HTTP_302; extern const char *HTTP_303; +extern char *get_http_auth_buff; #define HTTP_IS_CTL(x) (http_is_ctl[(unsigned char)(x)]) #define HTTP_IS_SEP(x) (http_is_sep[(unsigned char)(x)]) diff --git a/include/proto/sample.h b/include/proto/sample.h index 47099b3d4..e6808dd4b 100644 --- a/include/proto/sample.h +++ b/include/proto/sample.h @@ -26,6 +26,10 @@ #include #include +/* only exported for late memory allocation, do not use */ +extern char *sample_trash_buf1; +extern char *sample_trash_buf2; + struct sample_expr *sample_parse_expr(char **str, int *idx, char *err, int err_size); struct sample *sample_process(struct proxy *px, struct session *l4, void *l7, unsigned int dir, struct sample_expr *expr, diff --git a/src/haproxy.c b/src/haproxy.c index 2867ff90e..068a3ddf1 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -742,6 +742,10 @@ void init(int argc, char **argv) global.nbproc = 1; swap_buffer = (char *)calloc(1, global.tune.bufsize); + sample_trash_buf1 = (char *)calloc(1, global.tune.bufsize); + sample_trash_buf2 = (char *)calloc(1, global.tune.bufsize); + get_http_auth_buff = (char *)calloc(1, global.tune.bufsize); + fdinfo = (struct fdinfo *)calloc(1, sizeof(struct fdinfo) * (global.maxsock)); diff --git a/src/proto_http.c b/src/proto_http.c index 14d076c3f..61730d753 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -1196,7 +1196,7 @@ const char *http_parse_reqline(struct http_msg *msg, * searching again for something we are unable to find anyway. */ -char get_http_auth_buff[BUFSIZE]; +char *get_http_auth_buff; int get_http_auth(struct session *s) @@ -1245,7 +1245,7 @@ get_http_auth(struct session *s) if (!strncasecmp("Basic", auth_method.str, auth_method.len)) { len = base64dec(txn->auth.method_data.str, txn->auth.method_data.len, - get_http_auth_buff, BUFSIZE - 1); + get_http_auth_buff, global.tune.bufsize - 1); if (len < 0) return 0; diff --git a/src/sample.c b/src/sample.c index 296dea22f..a7d02e57a 100644 --- a/src/sample.c +++ b/src/sample.c @@ -15,6 +15,8 @@ #include #include +#include + #include #include @@ -28,11 +30,8 @@ static struct sample temp_smp; static struct chunk trash_chunk; /* trash buffers used or sample conversions */ -static char sample_trash_buf1[BUFSIZE]; -static char sample_trash_buf2[BUFSIZE]; - -/* sample_trash_buf point on used buffer*/ -static char *sample_trash_buf = sample_trash_buf1; +char *sample_trash_buf1; +char *sample_trash_buf2; /* list head of all known sample fetch keywords */ static struct sample_fetch_kw_list sample_fetches = { @@ -109,12 +108,13 @@ struct sample_conv *find_sample_conv(const char *kw, int len) */ struct chunk *sample_get_trash_chunk(void) { - if (sample_trash_buf == sample_trash_buf1) - sample_trash_buf = sample_trash_buf2; - else - sample_trash_buf = sample_trash_buf1; + char *sample_trash_buf; - chunk_init(&trash_chunk, sample_trash_buf, BUFSIZE); + sample_trash_buf = sample_trash_buf1; + sample_trash_buf1 = sample_trash_buf2; + sample_trash_buf2 = sample_trash_buf1; + + chunk_init(&trash_chunk, sample_trash_buf, global.tune.bufsize); return &trash_chunk; }