VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/libzip/zip_fopen_index_encrypted.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/libzip/zip_fopen_index_encrypted.c')
-rw-r--r--src/Common/libzip/zip_fopen_index_encrypted.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/Common/libzip/zip_fopen_index_encrypted.c b/src/Common/libzip/zip_fopen_index_encrypted.c
index 4c32e026..40483709 100644
--- a/src/Common/libzip/zip_fopen_index_encrypted.c
+++ b/src/Common/libzip/zip_fopen_index_encrypted.c
@@ -1,10 +1,10 @@
/*
zip_fopen_index_encrypted.c -- open file for reading by index w/ password
- Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2021 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <libzip@nih.at>
+ The authors can be contacted at <info@libzip.org>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
@@ -16,9 +16,9 @@
distribution.
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
-
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
@@ -40,26 +40,28 @@
static zip_file_t *_zip_file_new(zip_t *za);
ZIP_EXTERN zip_file_t *
-zip_fopen_index_encrypted(zip_t *za, zip_uint64_t index, zip_flags_t flags,
- const char *password)
-{
+zip_fopen_index_encrypted(zip_t *za, zip_uint64_t index, zip_flags_t flags, const char *password) {
zip_file_t *zf;
zip_source_t *src;
- if ((src=_zip_source_zip_new(za, za, index, flags, 0, 0, password)) == NULL)
- return NULL;
+ if (password != NULL && password[0] == '\0') {
+ password = NULL;
+ }
+
+ if ((src = zip_source_zip_file_create(za, index, flags, 0, -1, password, &za->error)) == NULL)
+ return NULL;
if (zip_source_open(src) < 0) {
- _zip_error_set_from_source(&za->error, src);
- zip_source_free(src);
- return NULL;
+ zip_error_set_from_source(&za->error, src);
+ zip_source_free(src);
+ return NULL;
}
- if ((zf=_zip_file_new(za)) == NULL) {
- zip_source_free(src);
- return NULL;
+ if ((zf = _zip_file_new(za)) == NULL) {
+ zip_source_free(src);
+ return NULL;
}
zf->src = src;
@@ -67,20 +69,17 @@ zip_fopen_index_encrypted(zip_t *za, zip_uint64_t index, zip_flags_t flags,
}
static zip_file_t *
-_zip_file_new(zip_t *za)
-{
+_zip_file_new(zip_t *za) {
zip_file_t *zf;
- if ((zf=(zip_file_t *)malloc(sizeof(struct zip_file))) == NULL) {
- zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
- return NULL;
+ if ((zf = (zip_file_t *)malloc(sizeof(struct zip_file))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return NULL;
}
- zf->za = za;
zip_error_init(&zf->error);
- zf->eof = 0;
zf->src = NULL;
return zf;
}