diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2022-01-16 19:49:48 +0000 |
---|---|---|
committer | A Wireshark GitLab Utility <6629907-ws-gitlab-utility@users.noreply.gitlab.com> | 2022-01-16 19:49:48 +0000 |
commit | 1b461768492ffdbdcd898b2b57fdabca49ad19fc (patch) | |
tree | ac28cf09447e7c5eb4885bf86f4b99e40e840cda /epan | |
parent | c8c7479acee6ccbf586a73707bb1a0e511729ec9 (diff) |
tvbuff: add robustness to memory copy related functions
Diffstat (limited to 'epan')
-rw-r--r-- | epan/tvbuff.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/epan/tvbuff.c b/epan/tvbuff.c index 9c411fdad3..eb9fe8261a 100644 --- a/epan/tvbuff.c +++ b/epan/tvbuff.c @@ -928,11 +928,11 @@ tvb_memcpy(tvbuff_t *tvb, void *target, const gint offset, size_t length) DISSECTOR_ASSERT(length <= 0x7FFFFFFF); check_offset_length(tvb, offset, (gint) length, &abs_offset, &abs_length); - if (tvb->real_data) { + if (target && tvb->real_data) { return memcpy(target, tvb->real_data + abs_offset, abs_length); } - if (tvb->ops->tvb_memcpy) + if (target && tvb->ops->tvb_memcpy) return tvb->ops->tvb_memcpy(tvb, target, abs_offset, abs_length); /* @@ -975,6 +975,9 @@ tvb_memdup(wmem_allocator_t *scope, tvbuff_t *tvb, const gint offset, size_t len check_offset_length(tvb, offset, (gint) length, &abs_offset, &abs_length); + if (abs_length == 0) + return NULL; + duped = wmem_alloc(scope, abs_length); return tvb_memcpy(tvb, duped, abs_offset, abs_length); } |