Skip to content

Commit fb59b49

Browse files
remicolletdillof
authored andcommitted
Fix memory leak on multiple call to zip_file_set_encryption
If password is set twice, the first allocation is never freed
1 parent 3cd08fb commit fb59b49

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

lib/zip_file_set_encryption.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,17 @@ zip_file_set_encryption(zip_t *za, zip_uint64_t idx, zip_uint16_t method, const
8080

8181
e->changes->encryption_method = method;
8282
e->changes->changed |= ZIP_DIRENT_ENCRYPTION_METHOD;
83+
if (e->changes->changed & ZIP_DIRENT_PASSWORD) {
84+
_zip_crypto_clear(e->changes->password, strlen(e->changes->password));
85+
free(e->changes->password);
86+
}
8387
if (password) {
8488
e->changes->password = our_password;
8589
e->changes->changed |= ZIP_DIRENT_PASSWORD;
8690
}
8791
else {
88-
if (e->changes->changed & ZIP_DIRENT_PASSWORD) {
89-
_zip_crypto_clear(e->changes->password, strlen(e->changes->password));
90-
free(e->changes->password);
91-
e->changes->password = e->orig ? e->orig->password : NULL;
92-
e->changes->changed &= ~ZIP_DIRENT_PASSWORD;
93-
}
92+
e->changes->password = e->orig ? e->orig->password : NULL;
93+
e->changes->changed &= ~ZIP_DIRENT_PASSWORD;
9494
}
9595

9696
return 0;

0 commit comments

Comments
 (0)