summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/krb5/krb5.hin4
-rw-r--r--src/kprop/kpropd.c2
-rw-r--r--src/lib/crypto/crypto_tests/t_cksums.c1
-rw-r--r--src/lib/gssapi/krb5/util_cksum.c16
-rw-r--r--src/lib/krb5/krb/kfree.c8
-rw-r--r--src/tests/rdreq.c2
6 files changed, 12 insertions, 21 deletions
diff --git a/src/include/krb5/krb5.hin b/src/include/krb5/krb5.hin
index d48685357..4cd9ad5ff 100644
--- a/src/include/krb5/krb5.hin
+++ b/src/include/krb5/krb5.hin
@@ -4692,6 +4692,8 @@ krb5_free_checksum(krb5_context context, krb5_checksum *val);
* @param [in] val Checksum structure to free contents of
*
* This function frees the contents of @a val, but not the structure itself.
+ * It sets the checksum's data pointer to null and (beginning in release 1.19)
+ * sets its length to zero.
*/
void KRB5_CALLCONV
krb5_free_checksum_contents(krb5_context context, krb5_checksum *val);
@@ -4751,6 +4753,8 @@ krb5_free_octet_data(krb5_context context, krb5_octet_data *val);
* @param [in] val Data structure to free contents of
*
* This function frees the contents of @a val, but not the structure itself.
+ * It sets the structure's data pointer to null and (beginning in release 1.19)
+ * sets its length to zero.
*/
void KRB5_CALLCONV
krb5_free_data_contents(krb5_context context, krb5_data *val);
diff --git a/src/kprop/kpropd.c b/src/kprop/kpropd.c
index 5622d56e1..ab4a764aa 100644
--- a/src/kprop/kpropd.c
+++ b/src/kprop/kpropd.c
@@ -1412,7 +1412,6 @@ recv_database(krb5_context context, int fd, int database_fd,
}
n = write(database_fd, outbuf.data, outbuf.length);
krb5_free_data_contents(context, &inbuf);
- krb5_free_data_contents(context, &outbuf);
if (n < 0) {
snprintf(buf, sizeof(buf),
"while writing database block starting at offset %d",
@@ -1426,6 +1425,7 @@ recv_database(krb5_context context, int fd, int database_fd,
send_error(context, fd, KRB5KRB_ERR_GENERIC, buf);
}
received_size += outbuf.length;
+ krb5_free_data_contents(context, &outbuf);
}
/* OK, we've seen the entire file. Did we get too many bytes? */
diff --git a/src/lib/crypto/crypto_tests/t_cksums.c b/src/lib/crypto/crypto_tests/t_cksums.c
index 4da14ea43..8297fcbf5 100644
--- a/src/lib/crypto/crypto_tests/t_cksums.c
+++ b/src/lib/crypto/crypto_tests/t_cksums.c
@@ -254,6 +254,7 @@ main(int argc, char **argv)
}
krb5_free_checksum_contents(context, &cksum);
+ assert(cksum.length == 0);
}
return status;
}
diff --git a/src/lib/gssapi/krb5/util_cksum.c b/src/lib/gssapi/krb5/util_cksum.c
index a1770774e..2d6b50b2a 100644
--- a/src/lib/gssapi/krb5/util_cksum.c
+++ b/src/lib/gssapi/krb5/util_cksum.c
@@ -39,7 +39,6 @@ kg_checksum_channel_bindings(context, cb, cksum)
size_t sumlen;
krb5_data plaind;
krb5_error_code code;
- void *temp;
/* initialize the the cksum */
code = krb5_c_checksum_length(context, CKSUMTYPE_RSA_MD5, &sumlen);
@@ -88,21 +87,6 @@ kg_checksum_channel_bindings(context, cb, cksum)
code = krb5_c_make_checksum(context, CKSUMTYPE_RSA_MD5, 0, 0,
&plaind, cksum);
- if (code)
- goto cleanup;
-
- if ((temp = xmalloc(cksum->length)) == NULL) {
- krb5_free_checksum_contents(context, cksum);
- code = ENOMEM;
- goto cleanup;
- }
-
- memcpy(temp, cksum->contents, cksum->length);
- krb5_free_checksum_contents(context, cksum);
- cksum->contents = (krb5_octet *)temp;
-
- /* success */
-cleanup:
if (buf)
xfree(buf);
return code;
diff --git a/src/lib/krb5/krb/kfree.c b/src/lib/krb5/krb/kfree.c
index ab2409f17..6e3804405 100644
--- a/src/lib/krb5/krb/kfree.c
+++ b/src/lib/krb5/krb/kfree.c
@@ -145,6 +145,7 @@ krb5_free_checksum_contents(krb5_context context, krb5_checksum *val)
return;
free(val->contents);
val->contents = NULL;
+ val->length = 0;
}
void KRB5_CALLCONV
@@ -242,10 +243,9 @@ krb5_free_data_contents(krb5_context context, krb5_data *val)
{
if (val == NULL)
return;
- if (val->data) {
- free(val->data);
- val->data = 0;
- }
+ free(val->data);
+ val->data = NULL;
+ val->length = 0;
}
void KRB5_CALLCONV
diff --git a/src/tests/rdreq.c b/src/tests/rdreq.c
index c010cb2c7..52bec18c9 100644
--- a/src/tests/rdreq.c
+++ b/src/tests/rdreq.c
@@ -33,6 +33,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
#include <krb5.h>
int
@@ -105,6 +106,7 @@ main(int argc, char **argv)
}
krb5_free_data_contents(context, &apreq);
+ assert(apreq.length == 0);
krb5_auth_con_free(context, auth_con);
krb5_free_creds(context, cred);
krb5_cc_close(context, ccache);