summaryrefslogtreecommitdiff
path: root/third_party/heimdal/lib/krb5/store_emem.c
diff options
context:
space:
mode:
authorJoseph Sutton <josephsutton@catalyst.net.nz>2022-03-01 14:17:54 +1300
committerJoseph Sutton <jsutton@samba.org>2022-03-01 22:34:34 +0000
commit51569b3152a952d07fddaa3a70d60c920618c704 (patch)
tree4e447f5d9eb04c7acadf3cff4547068fc79d2113 /third_party/heimdal/lib/krb5/store_emem.c
parentfccf9859786dfb50b317ea2296c2494997f0ae09 (diff)
downloadsamba-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.c25
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);
}