[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b
Török Edvin
edwin at clamav.net
Sun Apr 4 01:08:16 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit b0033c8f56a308333f5e56a51c4846e25b5d304f
Author: Török Edvin <edwin at clamav.net>
Date: Mon Oct 26 17:23:12 2009 +0200
Fix crash on FreeBSD 6.4 (bb #1727).
diff --git a/libclamav/jsparse/js-norm.c b/libclamav/jsparse/js-norm.c
index 159648d..9de9dea 100644
--- a/libclamav/jsparse/js-norm.c
+++ b/libclamav/jsparse/js-norm.c
@@ -288,10 +288,13 @@ static long scope_lookup(struct scope *s, const char *token, const size_t len)
static int tokens_ensure_capacity(struct tokens *tokens, size_t cap)
{
if(tokens->capacity < cap) {
+ yystype *data;
cap += 1024;
- tokens->data = cli_realloc(tokens->data, cap * sizeof(*tokens->data));
- if(!tokens->data)
+ /* Keep old data if OOM */
+ data = cli_realloc(tokens->data, cap * sizeof(*tokens->data));
+ if(!data)
return CL_EMEM;
+ tokens->data = data;
tokens->capacity = cap;
}
return CL_SUCCESS;
@@ -299,7 +302,7 @@ static int tokens_ensure_capacity(struct tokens *tokens, size_t cap)
static int add_token(struct parser_state *state, const yystype *token)
{
- if(tokens_ensure_capacity(&state->tokens, state->tokens.cnt + 1) < 0)
+ if(tokens_ensure_capacity(&state->tokens, state->tokens.cnt + 1))
return -1;
state->tokens.data[state->tokens.cnt++] = *token;
return 0;
@@ -497,14 +500,16 @@ static const char *de_packer_2[] = {"p","a","c","k","e","d"};
static inline char *textbuffer_done(yyscan_t scanner)
{
+ char *str = 0;
/* free unusued memory */
- char *str = cli_realloc(scanner->buf.data, scanner->buf.pos);
- if(!str) {
- str = scanner->buf.data;
- }
+ if (!scanner->buf.pos)
+ scanner->buf.pos++;
+ str = cli_realloc(scanner->buf.data, scanner->buf.pos);
+ if(!str)
+ str = scanner->buf.data;
+/* memset(&scanner->buf, 0, sizeof(scanner->buf));
scanner->yytext = str;
- scanner->yylen = scanner->buf.pos - 1;
- memset(&scanner->buf, 0, sizeof(scanner->buf));
+ scanner->yylen = scanner->buf.pos ? scanner->buf.pos - 1 : 0;*/
return str;
}
@@ -1122,6 +1127,8 @@ void cli_js_process_buffer(struct parser_state *state, const char *buf, size_t n
free_token(&state->tokens.data[--state->tokens.cnt]);
str = cli_realloc(str, str_len + leng + 1);
+ if (!str)
+ break;
strncpy(str+str_len, text, leng);
str[str_len + leng] = '\0';
TOKEN_SET(prev_string, string, str);
@@ -1249,7 +1256,9 @@ static const enum char_class id_ctype[256] = {
static void textbuf_clean(struct text_buffer *buf)
{
if(buf->capacity > BUF_KEEP_SIZE) {
- buf->data = cli_realloc(buf->data, BUF_KEEP_SIZE);
+ yystype *data= cli_realloc(buf->data, BUF_KEEP_SIZE);
+ if (data)
+ buf->data = data;
buf->capacity = BUF_KEEP_SIZE;
}
buf->pos = 0;
@@ -1276,10 +1285,16 @@ static inline int parseString(YYSTYPE *lvalp, yyscan_t scanner, const char q,
len = scanner->insize - scanner->pos;
cli_textbuffer_append_normalize(&scanner->buf, start, len);
if(end) {
+ char *str;
/* skip over end quote */
scanner->pos += len + 1;
textbuffer_putc(&scanner->buf, '\0');
- TOKEN_SET(lvalp, string, textbuffer_done(scanner));
+ str = textbuffer_done(scanner);
+ if (str) {
+ TOKEN_SET(lvalp, string, str);
+ } else {
+ TOKEN_SET(lvalp, cstring, "");
+ }
scanner->state = Initial;
assert(lvalp->val.string);
return TOK_StringLiteral;
@@ -1429,8 +1444,8 @@ static int yy_scan_bytes(const char *p, size_t len, yyscan_t scanner)
static const char *yyget_text(yyscan_t scanner)
{
- assert(scanner->buf.data || scanner->yytext);
- return scanner->yytext ? scanner->yytext : scanner->buf.data;
+ assert(scanner->yytext || scanner->buf.data);
+ return scanner->yytext ? scanner->yytext : scanner->buf.data;
}
static int yyget_leng(yyscan_t scanner)
diff --git a/libclamav/jsparse/textbuf.h b/libclamav/jsparse/textbuf.h
index 44edee3..b8adfaf 100644
--- a/libclamav/jsparse/textbuf.h
+++ b/libclamav/jsparse/textbuf.h
@@ -10,10 +10,11 @@ static inline int textbuffer_ensure_capacity(struct text_buffer *txtbuf, size_t
{
if (txtbuf->pos + len > txtbuf->capacity) {
char *d;
- txtbuf->capacity = MAX(txtbuf->pos + len, txtbuf->capacity + 4096);
- d = cli_realloc(txtbuf->data, txtbuf->capacity);
+ unsigned capacity = MAX(txtbuf->pos + len, txtbuf->capacity + 4096);
+ d = cli_realloc(txtbuf->data, capacity);
if(!d)
return -1;
+ txtbuf->capacity = capacity;
txtbuf->data = d;
}
return 0;
--
Debian repository for ClamAV
More information about the Pkg-clamav-commits
mailing list