(decrypt_internal_special): do not not modify the original data
test case from Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13421 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 - 2003 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1997 - 2004 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -3157,8 +3157,7 @@ decrypt_internal_special(krb5_context context,
|
|||||||
struct encryption_type *et = crypto->et;
|
struct encryption_type *et = crypto->et;
|
||||||
size_t cksum_sz = CHECKSUMSIZE(et->checksum);
|
size_t cksum_sz = CHECKSUMSIZE(et->checksum);
|
||||||
size_t sz = len - cksum_sz - et->confoundersize;
|
size_t sz = len - cksum_sz - et->confoundersize;
|
||||||
char *cdata = (char *)data;
|
unsigned char *p;
|
||||||
char *tmp;
|
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
if ((len % et->padsize) != 0) {
|
if ((len % et->padsize) != 0) {
|
||||||
@@ -3166,21 +3165,26 @@ decrypt_internal_special(krb5_context context,
|
|||||||
return KRB5_BAD_MSIZE;
|
return KRB5_BAD_MSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = malloc (sz);
|
p = malloc (len);
|
||||||
if (tmp == NULL) {
|
if (p == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
memcpy(p, data, len);
|
||||||
|
|
||||||
ret = (*et->encrypt)(context, &crypto->key, data, len, FALSE, usage, ivec);
|
ret = (*et->encrypt)(context, &crypto->key, p, len, FALSE, usage, ivec);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
free(tmp);
|
free(p);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (tmp, cdata + cksum_sz + et->confoundersize, sz);
|
memmove (p, p + cksum_sz + et->confoundersize, sz);
|
||||||
|
result->data = realloc(p, sz);
|
||||||
result->data = tmp;
|
if(result->data == NULL) {
|
||||||
|
free(p);
|
||||||
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
result->length = sz;
|
result->length = sz;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user