|  | @@ -235,6 +235,20 @@ CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static int double_to_saturated_integer(double number)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    if (number >= INT_MAX)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        return INT_MAX;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else if (number <= INT_MIN)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        return INT_MIN;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return (int)number;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /* get the decimal point character of the current locale */
 | 
	
		
			
				|  |  |  static unsigned char get_decimal_point(void)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -319,21 +333,7 @@ loop_end:
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      item->valuedouble = number;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /* use saturation in case of overflow */
 | 
	
		
			
				|  |  | -    if (number >= INT_MAX)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        item->valueint = INT_MAX;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else if (number <= INT_MIN)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        item->valueint = INT_MIN;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        item->valueint = (int)number;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    item->valueint = double_to_saturated_integer(number);
 | 
	
		
			
				|  |  |      item->type = cJSON_Number;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      input_buffer->offset += (size_t)(after_end - number_c_string);
 | 
	
	
		
			
				|  | @@ -343,18 +343,7 @@ loop_end:
 | 
	
		
			
				|  |  |  /* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */
 | 
	
		
			
				|  |  |  CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    if (number >= INT_MAX)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        object->valueint = INT_MAX;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else if (number <= INT_MIN)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        object->valueint = INT_MIN;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        object->valueint = (int)number;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    object->valueint = double_to_saturated_integer(number);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return object->valuedouble = number;
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -2298,20 +2287,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          item->type = cJSON_Number;
 | 
	
		
			
				|  |  |          item->valuedouble = num;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        /* use saturation in case of overflow */
 | 
	
		
			
				|  |  | -        if (num >= INT_MAX)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            item->valueint = INT_MAX;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else if (num <= INT_MIN)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            item->valueint = INT_MIN;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            item->valueint = (int)num;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        item->valueint = double_to_saturated_integer(num);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return item;
 |