diff options
| author | 2013-06-30 20:33:42 -0400 | |
|---|---|---|
| committer | 2013-06-30 21:26:36 -0400 | |
| commit | 62349d85b5fb39e1dc61974b38594c7f0d58c29b (patch) | |
| tree | 06dd2b8909dc3f3758c810ba6f8c521401fbb263 | |
| parent | a124ee348d7862eaa2eb834246d2b74e3c68b518 (diff) | |
| download | libimobiledevice-62349d85b5fb39e1dc61974b38594c7f0d58c29b.tar.gz libimobiledevice-62349d85b5fb39e1dc61974b38594c7f0d58c29b.tar.bz2 | |
Fixed memory leak in lockdownd_gen_pair_cert() when getting cert data using OpenSSL.
| -rw-r--r-- | src/lockdown.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/lockdown.c b/src/lockdown.c index 1319e5d..21aa334 100644 --- a/src/lockdown.c +++ b/src/lockdown.c | |||
| @@ -1213,10 +1213,13 @@ lockdownd_error_t lockdownd_gen_pair_cert(key_data_t public_key, key_data_t * od | |||
| 1213 | /* copy buffer for output */ | 1213 | /* copy buffer for output */ |
| 1214 | membp = BIO_new(BIO_s_mem()); | 1214 | membp = BIO_new(BIO_s_mem()); |
| 1215 | if (membp && PEM_write_bio_X509(membp, dev_cert) > 0) { | 1215 | if (membp && PEM_write_bio_X509(membp, dev_cert) > 0) { |
| 1216 | odevice_cert->size = BIO_get_mem_data(membp, &odevice_cert->data); | 1216 | void *datap; |
| 1217 | odevice_cert->size = BIO_get_mem_data(membp, &datap); | ||
| 1218 | odevice_cert->data = malloc(odevice_cert->size); | ||
| 1219 | memcpy(odevice_cert->data, datap, odevice_cert->size); | ||
| 1217 | } | 1220 | } |
| 1218 | if (membp) | 1221 | if (membp) |
| 1219 | free(membp); | 1222 | BIO_free(membp); |
| 1220 | 1223 | ||
| 1221 | ohost_cert->data = malloc(pem_host_cert.size); | 1224 | ohost_cert->data = malloc(pem_host_cert.size); |
| 1222 | memcpy(ohost_cert->data, pem_host_cert.data, pem_host_cert.size); | 1225 | memcpy(ohost_cert->data, pem_host_cert.data, pem_host_cert.size); |
