mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	json: handle incomplete strings
If we run to the end of the string and the string is not closed, assume it closed.
This commit is contained in:
		
							parent
							
								
									799bc13c85
								
							
						
					
					
						commit
						d09cb1f05b
					
				
					 2 changed files with 14 additions and 2 deletions
				
			
		| 
						 | 
					@ -166,7 +166,7 @@ static inline int spa_json_next(struct spa_json * iter, const char **value)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (iter->depth != 0)
 | 
						if (iter->depth != 0)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	if (iter->state == __BARE) {
 | 
						if (iter->state != __STRUCT) {
 | 
				
			||||||
		iter->state = __STRUCT;
 | 
							iter->state = __STRUCT;
 | 
				
			||||||
		return iter->cur - *value;
 | 
							return iter->cur - *value;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -290,7 +290,7 @@ static inline int spa_json_parse_string(const char *val, int len, char *result)
 | 
				
			||||||
		result[len] = '\0';
 | 
							result[len] = '\0';
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (p = val+1; p < val + len-1; p++) {
 | 
						for (p = val+1; p < val + len; p++) {
 | 
				
			||||||
		if (*p == '\\') {
 | 
							if (*p == '\\') {
 | 
				
			||||||
			p++;
 | 
								p++;
 | 
				
			||||||
			if (*p == 'n')
 | 
								if (*p == 'n')
 | 
				
			||||||
| 
						 | 
					@ -305,6 +305,8 @@ static inline int spa_json_parse_string(const char *val, int len, char *result)
 | 
				
			||||||
				*result++ = '\f';
 | 
									*result++ = '\f';
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				*result++ = *p;
 | 
									*result++ = *p;
 | 
				
			||||||
 | 
							} else if (*p == '\"') {
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		} else
 | 
							} else
 | 
				
			||||||
			*result++ = *p;
 | 
								*result++ = *p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -232,6 +232,16 @@ static void test_new_string(void)
 | 
				
			||||||
	spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
 | 
						spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pw_properties_free(props);
 | 
						pw_properties_free(props);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						props = pw_properties_new_string("foo=bar bar=\"baz");
 | 
				
			||||||
 | 
						spa_assert(props != NULL);
 | 
				
			||||||
 | 
						spa_assert(props->flags == 0);
 | 
				
			||||||
 | 
						spa_assert(props->dict.n_items == 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						spa_assert(!strcmp(pw_properties_get(props, "foo"), "bar"));
 | 
				
			||||||
 | 
						spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pw_properties_free(props);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_update(void)
 | 
					static void test_update(void)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue