MEDIUM: remove remains of BUFSIZE in HTTP auth and sample conversions

Sample conversions rely on two alternative buffers which were previously
allocated as static bufs of size BUFSIZE. Now they're initialized to the
global buffer size. It was the same for HTTP authentication. Note that it
seems that none of them was prone to any mistake when dealing with the
buffer size, but better stay on the safe side by maintaining the old
assumption that a trash buffer is always "large enough".
This commit is contained in:
Willy Tarreau 2012-10-29 20:44:36 +01:00
parent 19d14ef104
commit 7e2c647ee7
5 changed files with 21 additions and 12 deletions

View File

@ -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)])

View File

@ -26,6 +26,10 @@
#include <types/sample.h>
#include <types/stick_table.h>
/* 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,

View File

@ -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));

View File

@ -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;

View File

@ -15,6 +15,8 @@
#include <arpa/inet.h>
#include <stdio.h>
#include <types/global.h>
#include <common/chunk.h>
#include <common/standard.h>
@ -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;
}