mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	Merged revisions 7736 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r7736 | kpfleming | 2006-01-03 10:34:12 -0600 (Tue, 03 Jan 2006) | 2 lines don't leak memory for (most) expression evaluations ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7737 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										36
									
								
								ast_expr2.fl
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								ast_expr2.fl
									
									
									
									
									
								
							| @@ -98,42 +98,42 @@ int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */ | |||||||
|  |  | ||||||
| int ast_expr(char *expr, char *buf, int length) | int ast_expr(char *expr, char *buf, int length) | ||||||
| { | { | ||||||
| 	struct parse_io *io; | 	struct parse_io io; | ||||||
|  | 	int return_value = 0; | ||||||
| 	 | 	 | ||||||
| 	io = calloc(sizeof(struct parse_io),1); | 	memset(&io, 0, sizeof(io)); | ||||||
| 	io->string = expr;  /* to pass to the error routine */ | 	io.string = expr;  /* to pass to the error routine */ | ||||||
| 	 | 	 | ||||||
| 	ast_yylex_init(&io->scanner); | 	ast_yylex_init(&io.scanner); | ||||||
| 	 | 	 | ||||||
| 	ast_yy_scan_string(expr, io->scanner); | 	ast_yy_scan_string(expr, io.scanner); | ||||||
| 	 | 	 | ||||||
| 	ast_yyparse ((void *) io); | 	ast_yyparse ((void *) &io); | ||||||
|  |  | ||||||
| 	ast_yylex_destroy(io->scanner); | 	ast_yylex_destroy(io.scanner); | ||||||
|  |  | ||||||
| 	if (io->val == NULL) { | 	if (!io.val) { | ||||||
| 		if (length > 1) { | 		if (length > 1) { | ||||||
| 			strcpy(buf, "0"); | 			strcpy(buf, "0"); | ||||||
| 			return 1; | 			return_value = 1; | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		if (io->val->type == AST_EXPR_integer) { | 		if (io.val->type == AST_EXPR_integer) { | ||||||
| 			int res_length; | 			int res_length; | ||||||
|  |  | ||||||
| 			res_length = snprintf(buf, length, "%ld", (long int) io->val->u.i); | 			res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i); | ||||||
| 			return res_length <= length ? res_length : length; | 			return_value = (res_length <= length) ? res_length : length; | ||||||
| 		} else { | 		} else { | ||||||
| #ifdef STANDALONE | #ifdef STANDALONE | ||||||
| 			strncpy(buf, io->val->u.s, length - 1); | 			strncpy(buf, io.val->u.s, length - 1); | ||||||
| #else /* !STANDALONE */ | #else /* !STANDALONE */ | ||||||
| 			ast_copy_string(buf, io->val->u.s, length); | 			ast_copy_string(buf, io.val->u.s, length); | ||||||
| #endif /* STANDALONE */ | #endif /* STANDALONE */ | ||||||
| 			return strlen(buf); | 			return_value = strlen(buf); | ||||||
| 		} | 		} | ||||||
| 		free(io->val); | 		free(io.val); | ||||||
| 	} | 	} | ||||||
| 	free(io); | 	return return_value; | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio ) | int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio ) | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								ast_expr2f.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								ast_expr2f.c
									
									
									
									
									
								
							| @@ -2562,42 +2562,42 @@ int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */ | |||||||
|  |  | ||||||
| int ast_expr(char *expr, char *buf, int length) | int ast_expr(char *expr, char *buf, int length) | ||||||
| { | { | ||||||
| 	struct parse_io *io; | 	struct parse_io io; | ||||||
|  | 	int return_value = 0; | ||||||
| 	 | 	 | ||||||
| 	io = calloc(sizeof(struct parse_io),1); | 	memset(&io, 0, sizeof(io)); | ||||||
| 	io->string = expr;  /* to pass to the error routine */ | 	io.string = expr;  /* to pass to the error routine */ | ||||||
| 	 | 	 | ||||||
| 	ast_yylex_init(&io->scanner); | 	ast_yylex_init(&io.scanner); | ||||||
| 	 | 	 | ||||||
| 	ast_yy_scan_string(expr, io->scanner); | 	ast_yy_scan_string(expr, io.scanner); | ||||||
| 	 | 	 | ||||||
| 	ast_yyparse ((void *) io); | 	ast_yyparse ((void *) &io); | ||||||
|  |  | ||||||
| 	ast_yylex_destroy(io->scanner); | 	ast_yylex_destroy(io.scanner); | ||||||
|  |  | ||||||
| 	if (io->val == NULL) { | 	if (!io.val) { | ||||||
| 		if (length > 1) { | 		if (length > 1) { | ||||||
| 			strcpy(buf, "0"); | 			strcpy(buf, "0"); | ||||||
| 			return 1; | 			return_value = 1; | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		if (io->val->type == AST_EXPR_integer) { | 		if (io.val->type == AST_EXPR_integer) { | ||||||
| 			int res_length; | 			int res_length; | ||||||
|  |  | ||||||
| 			res_length = snprintf(buf, length, "%ld", (long int) io->val->u.i); | 			res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i); | ||||||
| 			return res_length <= length ? res_length : length; | 			return_value = (res_length <= length) ? res_length : length; | ||||||
| 		} else { | 		} else { | ||||||
| #ifdef STANDALONE | #ifdef STANDALONE | ||||||
| 			strncpy(buf, io->val->u.s, length - 1); | 			strncpy(buf, io.val->u.s, length - 1); | ||||||
| #else /* !STANDALONE */ | #else /* !STANDALONE */ | ||||||
| 			ast_copy_string(buf, io->val->u.s, length); | 			ast_copy_string(buf, io.val->u.s, length); | ||||||
| #endif /* STANDALONE */ | #endif /* STANDALONE */ | ||||||
| 			return strlen(buf); | 			return_value = strlen(buf); | ||||||
| 		} | 		} | ||||||
| 		free(io->val); | 		free(io.val); | ||||||
| 	} | 	} | ||||||
| 	free(io); | 	return return_value; | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio ) | int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user