don’t read past buffer for empty nameref targets (fmunozs, Valgrind)
This commit is contained in:
		
							
								
								
									
										10
									
								
								var.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								var.c
									
									
									
									
									
								
							| @@ -28,7 +28,7 @@ | ||||
| #include <sys/sysctl.h> | ||||
| #endif | ||||
|  | ||||
| __RCSID("$MirOS: src/bin/mksh/var.c,v 1.199 2016/02/26 18:48:14 tg Exp $"); | ||||
| __RCSID("$MirOS: src/bin/mksh/var.c,v 1.200 2016/03/01 20:06:15 tg Exp $"); | ||||
|  | ||||
| /*- | ||||
|  * Variables | ||||
| @@ -829,12 +829,14 @@ typeset(const char *var, uint32_t set, uint32_t clr, int field, int base) | ||||
| 		/* check target value for being a valid variable name */ | ||||
| 		ccp = skip_varname(qval, false); | ||||
| 		if (ccp == qval) { | ||||
| 			if (ksh_isdigit(qval[0])) { | ||||
| 				int c; | ||||
| 			int c; | ||||
|  | ||||
| 			if (!(c = (unsigned char)qval[0])) | ||||
| 				goto nameref_empty; | ||||
| 			else if (ksh_isdigit(c)) | ||||
| 				if (getn(qval, &c)) | ||||
| 					goto nameref_rhs_checked; | ||||
| 			} else if (qval[1] == '\0') switch (qval[0]) { | ||||
| 			else if (qval[1] == '\0') switch (c) { | ||||
| 			case '$': | ||||
| 			case '!': | ||||
| 			case '?': | ||||
|   | ||||
		Reference in New Issue
	
	Block a user