(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
This commit is contained in:
Assar Westerlund
1999-04-19 16:38:45 +00:00
parent 5ba1a9f8d3
commit f25d29ec48

View File

@@ -89,18 +89,20 @@ krb5_storage_to_data(krb5_storage *sp, krb5_data *data)
{ {
off_t pos; off_t pos;
size_t size; size_t size;
krb5_error_code ret;
pos = sp->seek(sp, 0, SEEK_CUR); pos = sp->seek(sp, 0, SEEK_CUR);
size = (size_t)sp->seek(sp, 0, SEEK_END); size = (size_t)sp->seek(sp, 0, SEEK_END);
data->length = size; ret = krb5_data_alloc (data, size);
data->data = malloc(data->length); if (ret) {
if(data->data == NULL){
data->length = 0;
sp->seek(sp, pos, SEEK_SET); sp->seek(sp, pos, SEEK_SET);
return ENOMEM; return ret;
} }
if (size) {
sp->seek(sp, 0, SEEK_SET); sp->seek(sp, 0, SEEK_SET);
sp->fetch(sp, data->data, data->length); sp->fetch(sp, data->data, data->length);
sp->seek(sp, pos, SEEK_SET); sp->seek(sp, pos, SEEK_SET);
}
return 0; return 0;
} }
@@ -231,14 +233,14 @@ krb5_ret_data(krb5_storage *sp,
ret = krb5_ret_int32(sp, &size); ret = krb5_ret_int32(sp, &size);
if(ret) if(ret)
return ret; return ret;
data->length = size; ret = krb5_data_alloc (data, size);
if (ret)
return ret;
if (size) { if (size) {
data->data = malloc(size);
ret = sp->fetch(sp, data->data, size); ret = sp->fetch(sp, data->data, size);
if(ret != size) if(ret != size)
return (ret < 0)? errno : KRB5_CC_END; return (ret < 0)? errno : KRB5_CC_END;
} else }
data->data = NULL;
return 0; return 0;
} }