(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;
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;
}