1--TEST--
2Bug #80833 (ZipArchive::getStream doesn't use setPassword)
3--SKIPIF--
4<?php
5if (!extension_loaded('zip')) die("skip zip extension not available");
6if (!method_exists('ZipArchive', 'setEncryptionName')) die('skip encryption not supported');
7?>
8--FILE--
9<?php
10$create_zip = new ZipArchive();
11$create_zip->open(__DIR__ . "/80833.zip", ZipArchive::CREATE);
12$create_zip->setPassword("default_password");
13$create_zip->addFromString("test.txt", "This is a test string.");
14$create_zip->setEncryptionName("test.txt", ZipArchive::EM_AES_256, "first_password");
15$create_zip->addFromString("test2.txt", "This is another test string.");
16$create_zip->setEncryptionName("test2.txt", ZipArchive::EM_AES_256, "second_password");
17$create_zip->close();
18
19// Stream API
20$o = [
21	'zip' => [
22		'password' => "first_password",
23	],
24];
25$c = stream_context_create($o);
26var_dump(file_get_contents("zip://" . __DIR__ . "/80833.zip#test.txt", false, $c));
27
28// getStream method
29$extract_zip = new ZipArchive();
30$extract_zip->open(__DIR__ . "/80833.zip", ZipArchive::RDONLY);
31$extract_zip->setPassword("first_password");
32$file_stream = $extract_zip->getStream("test.txt");
33var_dump(stream_get_contents($file_stream));
34fclose($file_stream);
35$extract_zip->setPassword("second_password");
36$file_stream = $extract_zip->getStream("test2.txt");
37var_dump(stream_get_contents($file_stream));
38fclose($file_stream);
39
40// Archive close before the stream
41$extract_zip->setPassword("first_password");
42$file_stream = $extract_zip->getStream("test.txt");
43$extract_zip->close();
44var_dump(stream_get_contents($file_stream));
45fclose($file_stream);
46?>
47--CLEAN--
48<?php
49@unlink(__DIR__ . "/80833.zip");
50?>
51--EXPECTF--
52string(22) "This is a test string."
53string(22) "This is a test string."
54string(28) "This is another test string."
55
56Warning: stream_get_contents(): Zip stream error: Containing zip archive was closed in %s
57string(0) ""
58