summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--channels/chan_sip.c8
-rw-r--r--include/asterisk/strings.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index fc176db02..6c7478ceb 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -8308,15 +8308,15 @@ static void copy_request(struct sip_request *dst, const struct sip_request *src)
if (!dst->data && !(dst->data = ast_str_create(src->data->used)))
return;
else if (dst->data->len < src->data->used)
- ast_str_make_space(&dst->data, src->data->used);
+ ast_str_make_space(&dst->data, src->data->used + 1); /* Account for null terminator needed */
- memcpy(dst->data->str, src->data->str, src->data->used);
+ ast_copy_string(dst->data->str, src->data->str, dst->data->len);
dst->data->used = src->data->used;
offset = ((void *)dst->data->str) - ((void *)src->data->str);
/* Now fix pointer arithmetic */
- for (x=0; x < src->headers; x++)
+ for (x = 0; x < src->headers; x++)
dst->header[x] += offset;
- for (x=0; x < src->lines; x++)
+ for (x = 0; x < src->lines; x++)
dst->line[x] += offset;
/* On some occasions this function is called without parse_request being called first so lets not create an invalid pointer */
if (src->rlPart1)
diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h
index 226c7bb67..fbff083ab 100644
--- a/include/asterisk/strings.h
+++ b/include/asterisk/strings.h
@@ -326,7 +326,7 @@ int ast_get_timeval(const char *src, struct timeval *tv, struct timeval _default
*/
struct ast_str {
size_t len; /*!< The current maximum length of the string */
- size_t used; /*!< Amount of space used */
+ size_t used; /*!< Amount of space used. Does not include string's null terminator */
struct ast_threadstorage *ts; /*!< What kind of storage is this ? */
#define DS_MALLOC ((struct ast_threadstorage *)1)
#define DS_ALLOCA ((struct ast_threadstorage *)2)