summaryrefslogtreecommitdiff
path: root/ext/zip/zip_stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/zip/zip_stream.c')
-rw-r--r--ext/zip/zip_stream.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/zip/zip_stream.c b/ext/zip/zip_stream.c
index 2fa828a572..8e7dbcf769 100644
--- a/ext/zip/zip_stream.c
+++ b/ext/zip/zip_stream.c
@@ -30,6 +30,9 @@
#include "ext/standard/url.h"
+/* needed for ssize_t definition */
+#include <sys/types.h>
+
struct php_zip_stream_data_t {
struct zip *za;
struct zip_file *zf;
@@ -309,6 +312,14 @@ php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper,
za = zip_open(file_dirname, ZIP_CREATE, &err);
if (za) {
+ zval *tmpzval;
+
+ if (NULL != (tmpzval = php_stream_context_get_option(context, "zip", "password"))) {
+ if (Z_TYPE_P(tmpzval) != IS_STRING || zip_set_default_password(za, Z_STRVAL_P(tmpzval))) {
+ php_error_docref(NULL, E_WARNING, "Can't set zip password");
+ }
+ }
+
zf = zip_fopen(za, fragment, 0);
if (zf) {
self = emalloc(sizeof(*self));
@@ -348,7 +359,7 @@ static php_stream_wrapper_ops zip_stream_wops = {
NULL, /* rename */
NULL, /* mkdir */
NULL, /* rmdir */
- NULL
+ NULL /* metadata */
};
php_stream_wrapper php_stream_zip_wrapper = {