mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	config: bug: Fix SEGV in ast_category_insert when matching category isn't found
If you call ast_category_insert with a match category that doesn't exist, the list traverse runs out of 'next' categories and you get a SEGV. This patch adds check for the end-of-list condition and changes the signature to return an int for success/failure indication instead of a void. The only consumer of this function is manager and it was also changed to use the return value. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3993/ ........ Merged revisions 423276 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423277 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423278 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -783,24 +783,28 @@ void ast_category_append(struct ast_config *config, struct ast_category *categor | ||||
| 	config->current = category; | ||||
| } | ||||
|  | ||||
| void ast_category_insert(struct ast_config *config, struct ast_category *cat, const char *match) | ||||
| int ast_category_insert(struct ast_config *config, struct ast_category *cat, const char *match) | ||||
| { | ||||
| 	struct ast_category *cur_category; | ||||
|  | ||||
| 	if (!cat || !match) | ||||
| 		return; | ||||
| 	if (!config || !cat || !match) { | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if (!strcasecmp(config->root->name, match)) { | ||||
| 		cat->next = config->root; | ||||
| 		config->root = cat; | ||||
| 		return; | ||||
| 		return 0; | ||||
| 	} | ||||
| 	for (cur_category = config->root; cur_category; cur_category = cur_category->next) { | ||||
| 	for (cur_category = config->root; cur_category && cur_category->next; | ||||
| 		cur_category = cur_category->next) { | ||||
| 		if (!strcasecmp(cur_category->next->name, match)) { | ||||
| 			cat->next = cur_category->next; | ||||
| 			cur_category->next = cat; | ||||
| 			break; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| static void ast_destroy_template_list(struct ast_category *cat) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user