[asterisk-commits] anthonyl: branch anthonyl/8678-commentbuffer r49041 - /team/anthonyl/8678-com...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Thu Dec 28 16:46:04 MST 2006


Author: anthonyl
Date: Thu Dec 28 17:46:03 2006
New Revision: 49041

URL: http://svn.digium.com/view/asterisk?view=rev&rev=49041
Log:
this contains debugging information as well as a piliminary fix for the lline_buffer recursion issue which has been causing segfaults when processing a text based configuration file using the comment buffer

Modified:
    team/anthonyl/8678-commentbuffer/main/config.c

Modified: team/anthonyl/8678-commentbuffer/main/config.c
URL: http://svn.digium.com/view/asterisk/team/anthonyl/8678-commentbuffer/main/config.c?view=diff&rev=49041&r1=49040&r2=49041
==============================================================================
--- team/anthonyl/8678-commentbuffer/main/config.c (original)
+++ team/anthonyl/8678-commentbuffer/main/config.c Thu Dec 28 17:46:03 2006
@@ -86,6 +86,8 @@
 		comment_buffer[0] = 0;
 		comment_buffer_size = CB_INCR;
 		lline_buffer = ast_malloc(CB_INCR);
+		if (!lline_buffer)
+			return;
 		lline_buffer[0] = 0;
 		lline_buffer_size = CB_INCR;
 	} else {
@@ -127,8 +129,10 @@
 	int siz = strlen(str);
 	if (rem < siz+1) {
 		lline_buffer = ast_realloc(lline_buffer, lline_buffer_size + CB_INCR + siz + 1);
-		if (!lline_buffer)
+		if (!lline_buffer) {
+			ast_verbose("WARNING lline_buffer NULL\n");
 			return;
+		}
 		lline_buffer_size += CB_INCR + siz + 1;
 	}
 	strcat(lline_buffer,str);
@@ -167,6 +171,7 @@
 struct ast_category {
 	char name[80];
 	int ignored;			/*!< do not let user of the config see this category */
+	int include_level;	
 	struct ast_comment *precomments;
 	struct ast_comment *sameline;
 	struct ast_variable *root;
@@ -339,8 +344,10 @@
 		config->last->next = category;
 	else
 		config->root = category;
+	config->include_level = config->include_level;
 	config->last = category;
 	config->current = category;
+	ast_verbose("INCLUDE LEVEL: %i\n", config->include_level);
 }
 
 void ast_category_destroy(struct ast_category *cat)
@@ -796,6 +803,12 @@
 
 	if (withcomments) {
 		CB_INIT();
+		if (!lline_buffer || !comment_buffer) {
+			ast_log(LOG_ERROR, "Failed to initialize the comment buffer!\n");
+			return NULL;
+		}
+
+		ast_verbose("CB_INIT() called llinebuffer %p  comment_buffer %p\n", lline_buffer, comment_buffer);
 	}
 	
 #ifdef AST_INCLUDE_GLOB
@@ -848,6 +861,7 @@
 			lineno++;
 			if (fgets(buf, sizeof(buf), f)) {
 				if ( withcomments ) {    
+					ast_verbose("CB_ADD: lline_buffer (%p) for %s\n",lline_buffer, filename);
 					CB_ADD(lline_buffer);       /* add the current lline buffer to the comment buffer */
 					lline_buffer[0] = 0;        /* erase the lline buffer */
 				}
@@ -886,6 +900,7 @@
 								char *oldptr;
 								oldptr = process_buf + strlen(process_buf);
 								if ( withcomments ) {
+									ast_verbose("CB_ADD: (;)\n");
 									CB_ADD(";");
 									CB_ADD_LEN(oldptr+1,new_buf-oldptr-1);
 								}
@@ -910,6 +925,7 @@
 				}
 				if( withcomments && comment && !process_buf )
 				{
+					ast_verbose("CB_ADD buf(%p)\n", buf);
 					CB_ADD(buf);  /* the whole line is a comment, store it */
 				}
 				
@@ -937,16 +953,22 @@
 			}
 		}
 #endif
-	if (withcomments) {
-		if (comment_buffer) { 
-			free(comment_buffer);
-			free(lline_buffer);
-			comment_buffer=0; 
-			lline_buffer=0; 
-			comment_buffer_size=0; 
-			lline_buffer_size=0;
-		}
-	}
+
+	if (cfg->include_level == 1) {
+		if (withcomments) {
+			ast_verbose("LINE we are done processing %s\n", filename);
+			if (comment_buffer) { 
+				free(comment_buffer);
+				free(lline_buffer);
+				ast_verbose("free'ing llinebuffer\n");
+				comment_buffer=0; 
+				lline_buffer=0; 
+				comment_buffer_size=0; 
+				lline_buffer_size=0;
+			}
+		}
+	}
+	
 	if (count == 0)
 		return NULL;
 



More information about the asterisk-commits mailing list