diff options
author | Joseph Sutton <josephsutton@catalyst.net.nz> | 2022-03-01 14:17:54 +1300 |
---|---|---|
committer | Joseph Sutton <jsutton@samba.org> | 2022-03-01 22:34:34 +0000 |
commit | 51569b3152a952d07fddaa3a70d60c920618c704 (patch) | |
tree | 4e447f5d9eb04c7acadf3cff4547068fc79d2113 /third_party/heimdal/lib/krb5/store_emem.c | |
parent | fccf9859786dfb50b317ea2296c2494997f0ae09 (diff) | |
download | samba-51569b3152a952d07fddaa3a70d60c920618c704.tar.gz |
third_party/heimdal: import lorikeet-heimdal-202203010107 (commit 0e7a12404c388e831fe6933fcc3c86e7eb334825)
NOTE: THIS COMMIT WON'T COMPILE/WORK ON ITS OWN!
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14995
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'third_party/heimdal/lib/krb5/store_emem.c')
-rw-r--r-- | third_party/heimdal/lib/krb5/store_emem.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/third_party/heimdal/lib/krb5/store_emem.c b/third_party/heimdal/lib/krb5/store_emem.c index da66e5fa75e..6a3908f7463 100644 --- a/third_party/heimdal/lib/krb5/store_emem.c +++ b/third_party/heimdal/lib/krb5/store_emem.c @@ -33,6 +33,7 @@ #include "krb5_locl.h" #include "store-int.h" +#include <assert.h> typedef struct emem_storage{ unsigned char *base; @@ -45,10 +46,12 @@ static ssize_t emem_fetch(krb5_storage *sp, void *data, size_t size) { emem_storage *s = (emem_storage*)sp->data; + + assert(data != NULL && s->ptr != NULL); + if((size_t)(s->base + s->len - s->ptr) < size) size = s->base + s->len - s->ptr; - if (data != NULL) - memmove(data, s->ptr, size); + memmove(data, s->ptr, size); sp->seek(sp, size, SEEK_CUR); return size; } @@ -56,7 +59,17 @@ emem_fetch(krb5_storage *sp, void *data, size_t size) static ssize_t emem_store(krb5_storage *sp, const void *data, size_t size) { - emem_storage *s = (emem_storage*)sp->data; + emem_storage *s; + + if (size == 0) { + sp->seek(sp, 0, SEEK_CUR); + return 0; + } + + s = (emem_storage*)sp->data; + + assert(data != NULL); + if(size > (size_t)(s->base + s->size - s->ptr)){ void *base; size_t sz, off; @@ -71,8 +84,7 @@ emem_store(krb5_storage *sp, const void *data, size_t size) s->base = base; s->ptr = (unsigned char*)base + off; } - if (data != NULL) - memmove(s->ptr, data, size); + memmove(s->ptr, data, size); sp->seek(sp, size, SEEK_CUR); return size; } @@ -141,6 +153,9 @@ static void emem_free(krb5_storage *sp) { emem_storage *s = sp->data; + + assert(s->base != NULL); + memset_s(s->base, s->len, 0, s->len); free(s->base); } |