mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-11-04 00:37:22 +01:00 
			
		
		
		
	json: Tighten up json_iter_get_int/get_uint
- Ensure that input isn't an empty string
- Ensure that EINVAL errno (which could be optionally returned by
  strto{ul|l} is also checked.
- Since strtoul allows '+' and '-' characters in input, ensure that
  input which is expected to be an unsigned number doesn't start with
  '-'
			
			
This commit is contained in:
		
							parent
							
								
									26b7446178
								
							
						
					
					
						commit
						30b04bc3bb
					
				
							
								
								
									
										10
									
								
								src/json.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/json.c
									
									
									
									
									
								
							@ -309,13 +309,16 @@ bool json_iter_get_int(struct json_iter *iter, int *i)
 | 
			
		||||
	if (!iter_get_primitive_data(iter, &ptr, &len))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (!len)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	errno = 0;
 | 
			
		||||
 | 
			
		||||
	t = r = strtol(ptr, &endp, 10);
 | 
			
		||||
	if (endp != ptr + len)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (errno == ERANGE || r != t)
 | 
			
		||||
	if (errno == ERANGE || errno == EINVAL || r != t)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (i)
 | 
			
		||||
@ -335,13 +338,16 @@ bool json_iter_get_uint(struct json_iter *iter, unsigned int *i)
 | 
			
		||||
	if (!iter_get_primitive_data(iter, &ptr, &len))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (!len || *((char *) ptr) == '-')
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	errno = 0;
 | 
			
		||||
 | 
			
		||||
	t = r = strtoul(ptr, &endp, 10);
 | 
			
		||||
	if (endp != ptr + len)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (errno == ERANGE || r != t)
 | 
			
		||||
	if (errno == ERANGE || errno == EINVAL || r != t)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (i)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user