[asterisk-commits] anthonyl: branch anthonyl/8295-calloc r48171 - in
/team/anthonyl/8295-calloc:...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Nov 30 19:38:32 MST 2006
Author: anthonyl
Date: Thu Nov 30 20:38:31 2006
New Revision: 48171
URL: http://svn.digium.com/view/asterisk?view=rev&rev=48171
Log:
application of the reporters patch. modified so it would build.. still needs some fixups.
Modified:
team/anthonyl/8295-calloc/apps/app_mixmonitor.c
team/anthonyl/8295-calloc/main/ast_expr2.fl
team/anthonyl/8295-calloc/main/ast_expr2.y
team/anthonyl/8295-calloc/pbx/ael/ael.flex
team/anthonyl/8295-calloc/pbx/ael/ael.y
team/anthonyl/8295-calloc/utils/check_expr.c
Modified: team/anthonyl/8295-calloc/apps/app_mixmonitor.c
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/apps/app_mixmonitor.c?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/apps/app_mixmonitor.c (original)
+++ team/anthonyl/8295-calloc/apps/app_mixmonitor.c Thu Nov 30 20:38:31 2006
@@ -41,6 +41,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -233,7 +234,7 @@
/* Pre-allocate mixmonitor structure and spy */
if (!(mixmonitor = calloc(1, len))) {
- return;
+ exit(ENOMEM);
}
/* Copy over flags and channel name */
Modified: team/anthonyl/8295-calloc/main/ast_expr2.fl
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/main/ast_expr2.fl?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/main/ast_expr2.fl (original)
+++ team/anthonyl/8295-calloc/main/ast_expr2.fl Thu Nov 30 20:38:31 2006
@@ -68,15 +68,15 @@
} while (0)
#define SET_STRING do { \
- yylval_param->val = calloc(1, sizeof(struct val)); \
+ yylval_param->val = calloc(1, sizeof(struct val)); if (! yylval_param->val) exit(ENOMEM); \
yylval_param->val->type = AST_EXPR_string; \
- yylval_param->val->u.s = strdup(yytext); \
+ yylval_param->val->u.s = strdup(yytext); if (! yylval_param->val->u.s) exit(ENOMEM); \
} while (0)
#define SET_NUMERIC_STRING do { \
- yylval_param->val = calloc(1, sizeof(struct val)); \
+ yylval_param->val = calloc(1, sizeof(struct val)); if (! yylval_param->val) exit(ENOMEM); \
yylval_param->val->type = AST_EXPR_numeric_string; \
- yylval_param->val->u.s = strdup(yytext); \
+ yylval_param->val->u.s = strdup(yytext); if (! yylval_param->val->u.s) exit(ENOMEM); \
} while (0)
struct parse_io
Modified: team/anthonyl/8295-calloc/main/ast_expr2.y
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/main/ast_expr2.y?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/main/ast_expr2.y (original)
+++ team/anthonyl/8295-calloc/main/ast_expr2.y Thu Nov 30 20:38:31 2006
@@ -172,7 +172,7 @@
%%
-start: expr { ((struct parse_io *)parseio)->val = (struct val *)calloc(sizeof(struct val),1);
+start: expr { ((struct parse_io *)parseio)->val = (struct val*) calloc(1, sizeof(struct val)); if (! ((struct parse_io*) parseio)->val) exit(ENOMEM);
((struct parse_io *)parseio)->val->type = $1->type;
if( $1->type == AST_EXPR_integer )
((struct parse_io *)parseio)->val->u.i = $1->u.i;
@@ -180,9 +180,9 @@
((struct parse_io *)parseio)->val->u.s = $1->u.s;
free($1);
}
- | {/* nothing */ ((struct parse_io *)parseio)->val = (struct val *)calloc(sizeof(struct val),1);
+ | {/* nothing */ ((struct parse_io *)parseio)->val = (struct val*) calloc(1, sizeof(struct val)); if (!((struct parse_io*) parseio)->val) exit(ENOMEM);
((struct parse_io *)parseio)->val->type = AST_EXPR_string;
- ((struct parse_io *)parseio)->val->u.s = strdup("");
+ ((struct parse_io *)parseio)->val->u.s = strdup(""); if (! ((struct parse_io*) parseio)->val->u.s) exit(ENOMEM);
}
;
Modified: team/anthonyl/8295-calloc/pbx/ael/ael.flex
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/pbx/ael/ael.flex?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/pbx/ael/ael.flex (original)
+++ team/anthonyl/8295-calloc/pbx/ael/ael.flex Thu Nov 30 20:38:31 2006
@@ -225,7 +225,7 @@
[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]][-a-zA-Z0-9'"_/.!\*\+\<\>\{\}$#\[\]]* {
STORE_POS;
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
prev_word = yylval->str;
return word;
}
@@ -244,7 +244,7 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
prev_word = 0;
return word;
}
@@ -253,7 +253,7 @@
yymore();
} else {
STORE_LOC;
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */
unput(')');
BEGIN(0);
@@ -276,7 +276,7 @@
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
return word;
}
yymore();
@@ -304,7 +304,7 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression!\n", my_file, my_lineno, my_col);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
return word;
}
@@ -316,7 +316,7 @@
BEGIN(0);
if ( !strcmp(yytext, ")") )
return RP;
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */
unput(')');
return word;
@@ -330,7 +330,7 @@
STORE_LOC;
if( !strcmp(yytext,"," ) )
return COMMA;
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
yylval->str[yyleng-1] = '\0';
unput(',');
return word;
@@ -343,7 +343,7 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
return word;
}
yymore();
@@ -366,7 +366,7 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
return word;
}
yymore();
@@ -374,7 +374,7 @@
<semic>{NOSEMIC}; {
STORE_LOC;
- yylval->str = strdup(yytext);
+ yylval->str = strdup(yytext); if (! yylval->str) exit(ENOMEM);
yylval->str[yyleng-1] = '\0';
unput(';');
BEGIN(0);
@@ -422,12 +422,29 @@
} else {
char *buffer;
struct stat stats;
- stat(fnamebuf, &stats);
- buffer = (char*)malloc(stats.st_size+1);
+
+ if (stat(fnamebuf, &stats)) {
+ fclose(in1);
+ ast_log(LOG_ERROR,"file status query failed (error: %d)\n", errno);
+ exit(errno);
+ }
+
+ buffer = (char*) malloc(stats.st_size+1); if (!buffer) { fclose(in1); exit(ENOMEM); }
fread(buffer, 1, stats.st_size, in1);
+
+ if (ferror(fin)) {
+ fclose(in1);
+ ast_log(LOG_ERROR,"file read failed (error: %d)\n", errno);
+ exit(errno);
+ }
+
buffer[stats.st_size] = 0;
ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf, (int)stats.st_size);
- fclose(in1);
+
+ if (fclose(in1)) {
+ ast_log(LOG_ERROR,"file close failed (error: %d)\n", errno);
+ exit(errno);
+ }
include_stack[include_stack_index].fname = my_file;
my_file = strdup(fnamebuf);
@@ -554,7 +571,7 @@
/* extern int ael_yydebug; */
- io = calloc(sizeof(struct parse_io),1);
+ io = calloc(1, sizeof(struct parse_io)); if (!io) exit(ENOMEM);
/* reset the global counters */
prev_word = 0;
my_lineno = 1;
@@ -568,13 +585,47 @@
*errors = 1;
return 0;
}
- my_file = strdup(filename);
- stat(filename, &stats);
+
+ if (!my_file) {
+ fclose(fin);
+ ast_log(LOG_ERROR,"string copy failed\n");
+ *errors = 1;
+ return 0;
+ }
+
+ if (stat(filename, &stats)) {
+ fclose(fin);
+ ast_log(LOG_ERROR,"file status query failed (error: %d)\n", errno);
+ *errors = 1;
+ return 0;
+ }
+
buffer = (char*)malloc(stats.st_size+2);
+
+ if (!buffer) {
+ fclose(fin);
+ ast_log(LOG_ERROR,"memory allocation failed\n");
+ *errors = 1;
+ return 0;
+ }
+
fread(buffer, 1, stats.st_size, fin);
+
+ if (ferror(fin)) {
+ fclose(fin);
+ ast_log(LOG_ERROR,"file read failed (error: %d)\n", errno);
+ *errors = 1;
+ return 0;
+ }
+
buffer[stats.st_size]=0;
- fclose(fin);
-
+
+ if (fclose(fin)) {
+ ast_log(LOG_ERROR,"file close failed (error: %d)\n", errno);
+ *errors = 1;
+ return 0;
+ }
+
ael_yy_scan_string (buffer ,io->scanner);
ael_yyset_lineno(1 , io->scanner);
Modified: team/anthonyl/8295-calloc/pbx/ael/ael.y
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/pbx/ael/ael.y?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/pbx/ael/ael.y (original)
+++ team/anthonyl/8295-calloc/pbx/ael/ael.y Thu Nov 30 20:38:31 2006
@@ -197,7 +197,7 @@
;
context_name : word { $$ = $1; }
- | KW_DEFAULT { $$ = strdup("default"); }
+ | KW_DEFAULT { $$ = strdup("default"); if (!$$) exit(ENOMEM); }
;
context : opt_abstract KW_CONTEXT context_name LC elements RC {
@@ -438,6 +438,9 @@
}
tot+=4; /* for safety */
bufx = calloc(1, tot);
+
+ if (!bufx) exit(ENOMEM);
+
strcpy(bufx,$1->u1.str);
strcat(bufx,"(");
/* XXX need to advance the pointer or the loop is very inefficient */
@@ -495,7 +498,7 @@
$$->next->next = nword($5, &@5); }
;
-opt_pri : /* empty */ { $$ = strdup("1"); }
+opt_pri : /* empty */ { $$ = strdup("1"); if (!$$) exit(ENOMEM); }
| COMMA word { $$ = $2; }
;
@@ -544,13 +547,13 @@
;
opt_word : word { $$ = $1 }
- | { $$ = strdup(""); }
+ | { $$ = strdup(""); if (!$$) exit(ENOMEM); }
;
eval_arglist : word_list { $$ = nword($1, &@1); }
| /*nothing! */ {
$$= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
- $$->u1.str = strdup(""); }
+ $$->u1.str = strdup(""); if (!$$->u1.str) exit(ENOMEM); }
| eval_arglist COMMA opt_word { $$ = linku1($1, nword($3, &@3)); }
;
@@ -721,7 +724,9 @@
}
len++;
}
- res = calloc(1, len+1);
+
+ if (!res) exit(ENOMEM);
+
res[0] = 0;
s = res;
for (p=mess; *p;) {
@@ -761,6 +766,9 @@
int first_column, int last_column)
{
pval *z = calloc(1, sizeof(struct pval));
+
+ if (!z) exit(ENOMEM);
+
z->type = type;
z->startline = first_line;
z->endline = last_line;
Modified: team/anthonyl/8295-calloc/utils/check_expr.c
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8295-calloc/utils/check_expr.c?view=diff&rev=48171&r1=48170&r2=48171
==============================================================================
--- team/anthonyl/8295-calloc/utils/check_expr.c (original)
+++ team/anthonyl/8295-calloc/utils/check_expr.c Thu Nov 30 20:38:31 2006
@@ -33,7 +33,7 @@
struct varz
{
char varname[100]; /* a really ultra-simple, space-wasting linked list of var=val data */
- char varval[1000]; /* if any varname is bigger than 100 chars, or val greater than 1000, then **CRASH** */
+ char varval[1000]; /* If a string is bigger than the target buffer, then truncate it. */
struct varz *next;
};
@@ -69,8 +69,15 @@
void set_var(const char *varname, const char *varval)
{
struct varz *t = calloc(1,sizeof(struct varz));
- strcpy(t->varname, varname);
- strcpy(t->varval, varval);
+
+ if (!t) {
+ ast_log(LOG_WARNING, "failed to allocate %i bytes\n", sizeof(struct varz));
+ return;
+ }
+
+ ast_copy_string(t->varname, varname, sizeof(t->varname));
+ ast_copy_string(t->varval, varval, sizeof(t->varval));
+
t->next = global_varlist;
global_varlist = t;
}
More information about the asterisk-commits
mailing list