From f25d29ec486c3231a506c7230cc9918232f49f9c Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 19 Apr 1999 16:38:45 +0000 Subject: [PATCH] (krb5_storage_to_data, krb5_ret_data): use krb5_data_alloc and be careful with checking allocation and sizes. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6008 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/store.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/krb5/store.c b/lib/krb5/store.c index d57ba85d4..5fd817bec 100644 --- a/lib/krb5/store.c +++ b/lib/krb5/store.c @@ -89,18 +89,20 @@ krb5_storage_to_data(krb5_storage *sp, krb5_data *data) { off_t pos; size_t size; + krb5_error_code ret; + pos = sp->seek(sp, 0, SEEK_CUR); size = (size_t)sp->seek(sp, 0, SEEK_END); - data->length = size; - data->data = malloc(data->length); - if(data->data == NULL){ - data->length = 0; + ret = krb5_data_alloc (data, size); + if (ret) { + sp->seek(sp, pos, SEEK_SET); + return ret; + } + if (size) { + sp->seek(sp, 0, SEEK_SET); + sp->fetch(sp, data->data, data->length); sp->seek(sp, pos, SEEK_SET); - return ENOMEM; } - sp->seek(sp, 0, SEEK_SET); - sp->fetch(sp, data->data, data->length); - sp->seek(sp, pos, SEEK_SET); return 0; } @@ -231,14 +233,14 @@ krb5_ret_data(krb5_storage *sp, ret = krb5_ret_int32(sp, &size); if(ret) return ret; - data->length = size; + ret = krb5_data_alloc (data, size); + if (ret) + return ret; if (size) { - data->data = malloc(size); ret = sp->fetch(sp, data->data, size); if(ret != size) return (ret < 0)? errno : KRB5_CC_END; - } else - data->data = NULL; + } return 0; }