From e0d1c36e437e5ddac0a08b11c5ec211875d8df2b Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Fri, 19 May 2017 09:05:47 +0200 Subject: [PATCH] Resolve pointers in capn_getv* Reported by @xvuko, fixes #20 --- lib/capn-list.inc | 4 +++- lib/capn.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/capn-list.inc b/lib/capn-list.inc index 7296638..ad94ec8 100644 --- a/lib/capn-list.inc +++ b/lib/capn-list.inc @@ -41,7 +41,9 @@ UINT_T CAT(capn_get,SZ) (LIST_T l, int off) { int CAT(capn_getv,SZ) (LIST_T l, int off, UINT_T *to, int sz) { int i; - capn_ptr p = l.p; + capn_ptr p; + capn_resolve(&l.p); + p = l.p; if (off + sz > p.len) { sz = p.len - off; } diff --git a/lib/capn.c b/lib/capn.c index f9d22d8..0708322 100644 --- a/lib/capn.c +++ b/lib/capn.c @@ -898,7 +898,9 @@ int capn_set1(capn_list1 l, int off, int val) { int capn_getv1(capn_list1 l, int off, uint8_t *data, int sz) { /* Note we only support aligned reads */ int bsz; - capn_ptr p = l.p; + capn_ptr p; + capn_resolve(&l.p); + p = l.p; if (p.type != CAPN_BIT_LIST || (off & 7) != 0) return -1;