|  | @@ -208,6 +208,11 @@ cJSON *cJSONUtils_GetPointer(cJSON *object, const char *pointer)
 | 
											
												
													
														|  |  static void cJSONUtils_InplaceDecodePointerString(char *string)
 |  |  static void cJSONUtils_InplaceDecodePointerString(char *string)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      char *s2 = string;
 |  |      char *s2 = string;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    if (string == NULL) {
 | 
											
												
													
														|  | 
 |  | +        return;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      for (; *string; s2++, string++)
 |  |      for (; *string; s2++, string++)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |          *s2 = (*string != '~')
 |  |          *s2 = (*string != '~')
 | 
											
										
											
												
													
														|  | @@ -229,12 +234,19 @@ static cJSON *cJSONUtils_PatchDetach(cJSON *object, const char *path)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /* copy path and split it in parent and child */
 |  |      /* copy path and split it in parent and child */
 | 
											
												
													
														|  |      parentptr = cJSONUtils_strdup(path);
 |  |      parentptr = cJSONUtils_strdup(path);
 | 
											
												
													
														|  | 
 |  | +    if (parentptr == NULL) {
 | 
											
												
													
														|  | 
 |  | +        return NULL;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      childptr = strrchr(parentptr, '/'); /* last '/' */
 |  |      childptr = strrchr(parentptr, '/'); /* last '/' */
 | 
											
												
													
														|  | -    if (childptr)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if (childptr == NULL)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        /* split strings */
 |  | 
 | 
											
												
													
														|  | -        *childptr++ = '\0';
 |  | 
 | 
											
												
													
														|  | 
 |  | +        free(parentptr);
 | 
											
												
													
														|  | 
 |  | +        return NULL;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +    /* split strings */
 | 
											
												
													
														|  | 
 |  | +    *childptr++ = '\0';
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      parent = cJSONUtils_GetPointer(object, parentptr);
 |  |      parent = cJSONUtils_GetPointer(object, parentptr);
 | 
											
												
													
														|  |      cJSONUtils_InplaceDecodePointerString(childptr);
 |  |      cJSONUtils_InplaceDecodePointerString(childptr);
 | 
											
												
													
														|  |  
 |  |  
 |