(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:
@@ -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){
|
sp->seek(sp, pos, SEEK_SET);
|
||||||
data->length = 0;
|
return ret;
|
||||||
|
}
|
||||||
|
if (size) {
|
||||||
|
sp->seek(sp, 0, SEEK_SET);
|
||||||
|
sp->fetch(sp, data->data, data->length);
|
||||||
sp->seek(sp, pos, SEEK_SET);
|
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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user