|  | @@ -306,17 +306,17 @@ static unsigned char* ensure(printbuffer * const p, size_t needed)
 | 
											
												
													
														|  |      return newbuffer + p->offset;
 |  |      return newbuffer + p->offset;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/* calculate the new length of the string in a printbuffer */
 |  | 
 | 
											
												
													
														|  | -static size_t update(const printbuffer *p)
 |  | 
 | 
											
												
													
														|  | 
 |  | +/* calculate the new length of the string in a printbuffer and update the offset */
 | 
											
												
													
														|  | 
 |  | +static void update_offset(printbuffer * const buffer)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -    const unsigned char *str = NULL;
 |  | 
 | 
											
												
													
														|  | -    if (!p || !p->buffer)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    const unsigned char *buffer_pointer = NULL;
 | 
											
												
													
														|  | 
 |  | +    if ((buffer == NULL) || (buffer->buffer == NULL))
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        return 0;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -    str = p->buffer + p->offset;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    buffer_pointer = buffer->buffer + buffer->offset;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    return p->offset + strlen((const char*)str);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    buffer->offset += strlen((const char*)buffer_pointer);
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  /* Render the number nicely from the given item into a string. */
 |  |  /* Render the number nicely from the given item into a string. */
 | 
											
										
											
												
													
														|  | @@ -866,7 +866,7 @@ static unsigned char *print(const cJSON * const item, cjbool format)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |          goto fail;
 |  |          goto fail;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -    buffer->offset = update(buffer); /* update the length of the string */
 |  | 
 | 
											
												
													
														|  | 
 |  | +    update_offset(buffer);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /* copy the buffer over to a new one */
 |  |      /* copy the buffer over to a new one */
 | 
											
												
													
														|  |      printed = (unsigned char*) cJSON_malloc(buffer->offset + 1);
 |  |      printed = (unsigned char*) cJSON_malloc(buffer->offset + 1);
 | 
											
										
											
												
													
														|  | @@ -1204,7 +1204,7 @@ static unsigned char *print_array(const cJSON * const item, const size_t depth,
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              return NULL;
 |  |              return NULL;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        output_buffer->offset = update(output_buffer);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        update_offset(output_buffer);
 | 
											
												
													
														|  |          if (current_element->next)
 |  |          if (current_element->next)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              length = format ? 2 : 1;
 |  |              length = format ? 2 : 1;
 | 
											
										
											
												
													
														|  | @@ -1416,7 +1416,7 @@ static unsigned char *print_object(const cJSON *item, size_t depth, cjbool fmt,
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              return NULL;
 |  |              return NULL;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        p->offset = update(p);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        update_offset(p);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          len = fmt ? 2 : 1;
 |  |          len = fmt ? 2 : 1;
 | 
											
												
													
														|  |          ptr = ensure(p, len);
 |  |          ptr = ensure(p, len);
 | 
											
										
											
												
													
														|  | @@ -1436,7 +1436,7 @@ static unsigned char *print_object(const cJSON *item, size_t depth, cjbool fmt,
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              return NULL;
 |  |              return NULL;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        p->offset = update(p);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        update_offset(p);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          /* print comma if not last */
 |  |          /* print comma if not last */
 | 
											
												
													
														|  |          len = (size_t) (fmt ? 1 : 0) + (child->next ? 1 : 0);
 |  |          len = (size_t) (fmt ? 1 : 0) + (child->next ? 1 : 0);
 |