mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Fix a file descriptor leak in off nominal path
While looking at the security vulnerability in ASTERISK-20967, Walter noticed a file descriptor leak and some other issues in off nominal code paths. This patch corrects them. Note that this patch is not related to the vulnerability in ASTERISK-20967, but the patch was placed on that issue. (closes issue ASTERISK-20967) Reported by: wdoekes patches: issueA20967_file_leak_and_unused_wkspace.patch uploaded by wdoekes (License 5674) ........ Merged revisions 384118 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 384119 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@384120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										10
									
								
								main/http.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								main/http.c
									
									
									
									
									
								
							| @@ -237,7 +237,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser, | ||||
| 		goto out403; | ||||
| 	} | ||||
|  | ||||
| 	/* Disallow any funny filenames at all */ | ||||
| 	/* Disallow any funny filenames at all (checking first character only??) */ | ||||
| 	if ((uri[0] < 33) || strchr("./|~@#$%^&*() \t", uri[0])) { | ||||
| 		goto out403; | ||||
| 	} | ||||
| @@ -252,6 +252,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser, | ||||
|  | ||||
| 	if (!(mtype = ast_http_ftype2mtype(ftype))) { | ||||
| 		snprintf(wkspace, sizeof(wkspace), "text/%s", S_OR(ftype, "plain")); | ||||
| 		mtype = wkspace; | ||||
| 	} | ||||
|  | ||||
| 	/* Cap maximum length */ | ||||
| @@ -269,12 +270,12 @@ static int static_callback(struct ast_tcptls_session_instance *ser, | ||||
| 		goto out404; | ||||
| 	} | ||||
|  | ||||
| 	fd = open(path, O_RDONLY); | ||||
| 	if (fd < 0) { | ||||
| 	if (strstr(path, "/private/") && !astman_is_authed(ast_http_manid_from_vars(headers))) { | ||||
| 		goto out403; | ||||
| 	} | ||||
|  | ||||
| 	if (strstr(path, "/private/") && !astman_is_authed(ast_http_manid_from_vars(headers))) { | ||||
| 	fd = open(path, O_RDONLY); | ||||
| 	if (fd < 0) { | ||||
| 		goto out403; | ||||
| 	} | ||||
|  | ||||
| @@ -297,6 +298,7 @@ static int static_callback(struct ast_tcptls_session_instance *ser, | ||||
| 	} | ||||
|  | ||||
| 	if ( (http_header = ast_str_create(255)) == NULL) { | ||||
| 		close(fd); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user