mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Fix saving and restoring umask
In two cases, we set a different umask for some piece of code and restore it afterwards. But if the contained code errors out, the umask is not restored. So add TRY/CATCH blocks to fix that.
This commit is contained in:
		
							parent
							
								
									58ffe141eb
								
							
						
					
					
						commit
						aa6b7b72d9
					
				| @ -1826,7 +1826,16 @@ BeginCopyTo(ParseState *pstate, | ||||
| 						 errmsg("relative path not allowed for COPY to file"))); | ||||
| 
 | ||||
| 			oumask = umask(S_IWGRP | S_IWOTH); | ||||
| 			cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_W); | ||||
| 			PG_TRY(); | ||||
| 			{ | ||||
| 				cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_W); | ||||
| 			} | ||||
| 			PG_CATCH(); | ||||
| 			{ | ||||
| 				umask(oumask); | ||||
| 				PG_RE_THROW(); | ||||
| 			} | ||||
| 			PG_END_TRY(); | ||||
| 			umask(oumask); | ||||
| 			if (cstate->copy_file == NULL) | ||||
| 			{ | ||||
|  | ||||
| @ -538,8 +538,17 @@ be_lo_export(PG_FUNCTION_ARGS) | ||||
| 	 */ | ||||
| 	text_to_cstring_buffer(filename, fnamebuf, sizeof(fnamebuf)); | ||||
| 	oumask = umask(S_IWGRP | S_IWOTH); | ||||
| 	fd = OpenTransientFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | PG_BINARY, | ||||
| 						   S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); | ||||
| 	PG_TRY(); | ||||
| 	{ | ||||
| 		fd = OpenTransientFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | PG_BINARY, | ||||
| 							   S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); | ||||
| 	} | ||||
| 	PG_CATCH(); | ||||
| 	{ | ||||
| 		umask(oumask); | ||||
| 		PG_RE_THROW(); | ||||
| 	} | ||||
| 	PG_END_TRY(); | ||||
| 	umask(oumask); | ||||
| 	if (fd < 0) | ||||
| 		ereport(ERROR, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user