aboutsummaryrefslogtreecommitdiffstats
path: root/epan/tvbuff.c
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2022-01-16 19:49:48 +0000
committerA Wireshark GitLab Utility <6629907-ws-gitlab-utility@users.noreply.gitlab.com>2022-01-16 19:49:48 +0000
commit1b461768492ffdbdcd898b2b57fdabca49ad19fc (patch)
treeac28cf09447e7c5eb4885bf86f4b99e40e840cda /epan/tvbuff.c
parentc8c7479acee6ccbf586a73707bb1a0e511729ec9 (diff)
tvbuff: add robustness to memory copy related functions
Diffstat (limited to 'epan/tvbuff.c')
-rw-r--r--epan/tvbuff.c7
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);
}