diff options
| -rw-r--r-- | hcid/dbus-sdp.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c index 3e68c7e0..5a79a7b4 100644 --- a/hcid/dbus-sdp.c +++ b/hcid/dbus-sdp.c @@ -222,26 +222,32 @@ static sdp_session_t *get_sdp_session(bdaddr_t *src, bdaddr_t *dst)  static void append_and_grow_string(void *data, const char *str)  { -	sdp_buf_t *buff = (sdp_buf_t *) data; +	sdp_buf_t *buff = data;  	int len;  	len = strlen(str);  	if (!buff->data) { -		buff->buf_size = DEFAULT_XML_BUF_SIZE; -		buff->data = realloc(buff->data, buff->buf_size); +		buff->data = malloc(DEFAULT_XML_BUF_SIZE);  		if (!buff->data)  			return; +		buff->buf_size = DEFAULT_XML_BUF_SIZE;  	}  	/* Grow string */  	while (buff->buf_size < (buff->data_size + len + 1)) { +		void *tmp; +		uint32_t new_size; +  		/* Grow buffer by a factor of 2 */ -		buff->buf_size = (buff->buf_size << 1); +		new_size = (buff->buf_size << 1); -		buff->data = realloc(buff->data, buff->buf_size); -		if (!buff->data) +		tmp = realloc(buff->data, new_size); +		if (!tmp)  			return; + +		buff->data = tmp; +		buff->buf_size = new_size;  	}  	/* Include the NULL character */ | 
