|  | @@ -782,7 +782,7 @@ static unsigned char *print_string(const cJSON * const item, printbuffer * const
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* Predeclare these prototypes. */
 | 
	
		
			
				|  |  |  static const unsigned char *parse_value(cJSON * const item, const unsigned char * const input, const unsigned char ** const ep);
 | 
	
		
			
				|  |  | -static unsigned char *print_value(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p);
 | 
	
		
			
				|  |  | +static unsigned char *print_value(const cJSON * const item, const size_t depth, const cjbool format, printbuffer * const output_buffer);
 | 
	
		
			
				|  |  |  static const unsigned char *parse_array(cJSON * const item, const unsigned char *input, const unsigned char ** const ep);
 | 
	
		
			
				|  |  |  static unsigned char *print_array(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p);
 | 
	
		
			
				|  |  |  static const unsigned char *parse_object(cJSON * const item, const unsigned char *input, const unsigned char ** const ep);
 | 
	
	
		
			
				|  | @@ -1000,16 +1000,11 @@ static const unsigned  char *parse_value(cJSON * const item, const unsigned char
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* Render a value to text. */
 | 
	
		
			
				|  |  | -static unsigned char *print_value(const cJSON *item, size_t depth, cjbool fmt, printbuffer *p)
 | 
	
		
			
				|  |  | +static unsigned char *print_value(const cJSON * const item, const size_t depth, const cjbool format,  printbuffer * const output_buffer)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    unsigned char *out = NULL;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (!item)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return NULL;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    unsigned char *output = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (p == NULL)
 | 
	
		
			
				|  |  | +    if ((item == NULL) || (output_buffer == NULL))
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          return NULL;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -1017,65 +1012,65 @@ static unsigned char *print_value(const cJSON *item, size_t depth, cjbool fmt, p
 | 
	
		
			
				|  |  |      switch ((item->type) & 0xFF)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          case cJSON_NULL:
 | 
	
		
			
				|  |  | -            out = ensure(p, 5);
 | 
	
		
			
				|  |  | -            if (out != NULL)
 | 
	
		
			
				|  |  | +            output = ensure(output_buffer, 5);
 | 
	
		
			
				|  |  | +            if (output != NULL)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                strcpy((char*)out, "null");
 | 
	
		
			
				|  |  | +                strcpy((char*)output, "null");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_False:
 | 
	
		
			
				|  |  | -            out = ensure(p, 6);
 | 
	
		
			
				|  |  | -            if (out != NULL)
 | 
	
		
			
				|  |  | +            output = ensure(output_buffer, 6);
 | 
	
		
			
				|  |  | +            if (output != NULL)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                strcpy((char*)out, "false");
 | 
	
		
			
				|  |  | +                strcpy((char*)output, "false");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_True:
 | 
	
		
			
				|  |  | -            out = ensure(p, 5);
 | 
	
		
			
				|  |  | -            if (out != NULL)
 | 
	
		
			
				|  |  | +            output = ensure(output_buffer, 5);
 | 
	
		
			
				|  |  | +            if (output != NULL)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                strcpy((char*)out, "true");
 | 
	
		
			
				|  |  | +                strcpy((char*)output, "true");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_Number:
 | 
	
		
			
				|  |  | -            out = print_number(item, p);
 | 
	
		
			
				|  |  | +            output = print_number(item, output_buffer);
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_Raw:
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              size_t raw_length = 0;
 | 
	
		
			
				|  |  |              if (item->valuestring == NULL)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                if (!p->noalloc)
 | 
	
		
			
				|  |  | +                if (!output_buffer->noalloc)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    cJSON_free(p->buffer);
 | 
	
		
			
				|  |  | +                    cJSON_free(output_buffer->buffer);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                out = NULL;
 | 
	
		
			
				|  |  | +                output = NULL;
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              raw_length = strlen(item->valuestring) + sizeof('\0');
 | 
	
		
			
				|  |  | -            out = ensure(p, raw_length);
 | 
	
		
			
				|  |  | -            if (out != NULL)
 | 
	
		
			
				|  |  | +            output = ensure(output_buffer, raw_length);
 | 
	
		
			
				|  |  | +            if (output != NULL)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                memcpy(out, item->valuestring, raw_length);
 | 
	
		
			
				|  |  | +                memcpy(output, item->valuestring, raw_length);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          case cJSON_String:
 | 
	
		
			
				|  |  | -            out = print_string(item, p);
 | 
	
		
			
				|  |  | +            output = print_string(item, output_buffer);
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_Array:
 | 
	
		
			
				|  |  | -            out = print_array(item, depth, fmt, p);
 | 
	
		
			
				|  |  | +            output = print_array(item, depth, format, output_buffer);
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case cJSON_Object:
 | 
	
		
			
				|  |  | -            out = print_object(item, depth, fmt, p);
 | 
	
		
			
				|  |  | +            output = print_object(item, depth, format, output_buffer);
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          default:
 | 
	
		
			
				|  |  | -            out = NULL;
 | 
	
		
			
				|  |  | +            output = NULL;
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    return out;
 | 
	
		
			
				|  |  | +    return output;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* Build an array from input text. */
 |