ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- tests/060.phpt000064400000002006152347044110007107 0ustar00--TEST-- RAR directory stream basic test --SKIPIF-- read())) { echo $entry."\n"; } $d->close(); echo "\nRoot entries encoded:\n"; $u = "rar://" . dirname(__FILE__) . '/dirs_and_extra_headers.rar'; $d = dir($u); while (false !== ($entry = $d->read())) { echo $entry."\n"; } $d->close(); echo "\nSub-root directory entries unencoded:\n"; $u = "rar://" . dirname(__FILE__) . '/dirs_and_extra_headers.rar*#%EF%AC%B0'; $d = dir($u); while (false !== ($entry = $d->read())) { echo $entry."\n"; } echo "\nDone.\n"; --EXPECTF-- Root entries unencoded: allow_everyone_ni file1.txt file2_אּ.txt with_streams.txt אּ Root entries encoded: allow_everyone_ni file1.txt file2_%EF%AC%B0.txt with_streams.txt %EF%AC%B0 Sub-root directory entries unencoded: %2Fempty%2E empty file3.txt file4_אּ.txt אּ_2 Done. tests/054.phpt000064400000005560152347044110007122 0ustar00--TEST-- Stream wrapper with header or file level passwords --SKIPIF-- array('file_password'=>'samplepassword')))); echo "\nHeaders: should work (password given was open_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_headers.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('open_password'=>'samplepassword')))); var_dump(stream_get_contents($stream)); ////////////////////// echo "\n\nFiles: should not work (no password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r"); echo "\nFiles: should not work (password given was open_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('open_password'=>'samplepassword')))); echo "\nFiles: should work (password given was file_password):\n"; $stream = fopen("rar://" . dirname(__FILE__) . '/encrypted_only_files.rar' . "#encfile1.txt", "r", false, stream_context_create(array('rar'=>array('file_password'=>'samplepassword')))); var_dump(stream_get_contents($stream)); echo "\nDone.\n"; --EXPECTF-- Headers: should not work (no password): Warning: fopen(rar://%sencrypted_headers.rar#encfile1.txt): %cailed to open stream: Error opening RAR archive %sencrypted_headers.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Headers: should not work (password given was file_password): Warning: fopen(rar://%sencrypted_headers.rar#encfile1.txt): %cailed to open stream: Error opening RAR archive %sencrypted_headers.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Headers: should work (password given was open_password): string(26) "Encrypted file 1 contents." Files: should not work (no password): Warning: fopen(rar://%sencrypted_only_files.rar#encfile1.txt): %cailed to open stream: Error opening file encfile1.txt inside RAR archive %sencrypted_only_files.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Files: should not work (password given was open_password): Warning: fopen(rar://%sencrypted_only_files.rar#encfile1.txt): %cailed to open stream: Error opening file encfile1.txt inside RAR archive %sencrypted_only_files.rar: ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d Files: should work (password given was file_password): string(26) "Encrypted file 1 contents." Done. tests/065.phpt000064400000003200152347044110007111 0ustar00--TEST-- Directory streams compatibility with RecursiveDirectoryIterator --SKIPIF-- rewind(); while($it->valid()) { if (!$it->isDot()) { echo 'SubPathName: ' . rawurldecode($it->getSubPathName()) . "\n"; echo 'SubPath: ' . rawurldecode($it->getSubPath()) . "\n"; echo 'Key: ' . $it->key() . "\n\n"; } $it->next(); } echo "Done.\n"; --EXPECTF-- SubPathName: file1.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%sfile1.txt SubPathName: file2_אּ.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%sfile2_%EF%AC%B0.txt SubPathName: with_streams.txt SubPath: Key: rar://%s/dirs_and_extra_headers.rar#%swith_streams.txt SubPathName: אּ%s%2Fempty%2E%sfile7.txt SubPath: אּ%s%2Fempty%2E Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%252Fempty%252E%sfile7.txt SubPathName: אּ%sfile3.txt SubPath: אּ Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%sfile3.txt SubPathName: אּ%sfile4_אּ.txt SubPath: אּ Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%sfile4_%EF%AC%B0.txt SubPathName: אּ%sאּ_2%sfile5.txt SubPath: אּ%sאּ_2 Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%EF%AC%B0_2%sfile5.txt SubPathName: אּ%sאּ_2%sfile6_אּ.txt SubPath: אּ%sאּ_2 Key: rar://%s/dirs_and_extra_headers.rar#%s%EF%AC%B0%s%EF%AC%B0_2%sfile6_%EF%AC%B0.txt Done. tests/071.phpt000064400000000651152347044110007115 0ustar00--TEST-- RarEntry::getPosition() test --SKIPIF-- --FILE-- getPosition() . ". $e\n"; } echo "\n"; echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file1.txt" (52b28202) 1. RarEntry for file "file2.txt" (f2c79881) 2. RarEntry for file "file3.txt" (bcbce32e) Done. tests/linux_rar.rar000064400000000257152347044110010424 0ustar00Rar!ϐs t )(w,X03 plain.txtϕ{[(!"/ˊAbN@9t > !0X03test file with whitespaces.txt̿D_B^F{ ={@tests/063.phpt000064400000000767152347044110007126 0ustar00--TEST-- RAR directory stream stat consistency with url stat --SKIPIF-- --FILE-- getEntry("file1.txt")); var_dump($a->getEntry("file1.txt")); echo "\n* dimension access:\n"; $a = RarArchive::open($f); var_dump($a[0]); var_dump($a[0]); echo "\n* foreach access:\n"; $a = RarArchive::open($f); foreach ($a as $e) { echo "shouldn't happen: $e\n"; }; foreach ($a as $e) { echo "shouldn't happen: $e\n"; }; echo "\n* url stat:\n"; var_dump(stat("rar://".rawurlencode($f)."#file1.txt")); var_dump(stat("rar://".rawurlencode($f)."#file1.txt")); //no need to test directory open, _rar_get_cachable_rararch handles it too echo "\n"; echo "Done.\n"; --EXPECTF-- * rar_list(): Warning: rar_list(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: rar_list(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: rar_list(): ERAR_EOPEN (file open error) in %s on line %d bool(false) * rar_entry_get(): Warning: RarArchive::getEntry(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: RarArchive::getEntry(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: RarArchive::getEntry(): ERAR_EOPEN (file open error) in %s on line %d bool(false) * dimension access: Warning: main(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d NULL Warning: main(): ERAR_EOPEN (file open error) in %s on line %d NULL * foreach access: Warning: main(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d Warning: main(): ERAR_EOPEN (file open error) in %s on line %d * url stat: Warning: stat(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: stat(): Error reading entries of archive %smulti_broken.part1.rar: ERAR_EOPEN (file open error) in %s on line %d Warning: stat(): stat failed for rar://%smulti_broken.part1.rar#file1.txt in %s on line %s bool(false) Warning: stat(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: stat(): Error reading entries of archive %smulti_broken.part1.rar: ERAR_EOPEN (file open error) in %s on line %d Warning: stat(): stat failed for rar://%smulti_broken.part1.rar#file1.txt in %s on line %d bool(false) Done.tests/102.phpt000064400000000627152347044110007113 0ustar00--TEST-- RarArchive direct instantiation does not crash (PHP 7) --SKIPIF-- = 7"); --FILE-- --FILE-- --EXPECTF-- object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(30) "test file with whitespaces.txt" ["unpacked_size%sprivate%s=> int(14) ["packed_size%sprivate%s=> int(20) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:32" ["crc%sprivate%s=> string(8) "21890dd9" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_entry_get() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done tests/092.phpt000064400000003747152347044110007131 0ustar00--TEST-- RarArchive::setAllowBroken has the desired effect --SKIPIF-- --FILE-- setAllowBroken(); }); argerr(function() use ($a) { rar_allow_broken_set($a); }); echo "\n* broken file; do not allow broken (default)\n"; $a = RarArchive::open($b, null, 'retnull'); var_dump($a->getEntries()); var_dump(count($a)); echo "\n* broken file; do not allow broken (explicit)\n"; $a = RarArchive::open($b, null, 'retnull'); $a->setAllowBroken(false); var_dump($a->getEntries()); var_dump(count($a)); echo "\n* broken file; allow broken\n"; $a = RarArchive::open($b, null, 'retnull'); $a->setAllowBroken(true); foreach ($a->getEntries() as $e) { echo "$e\n"; } var_dump(count($a)); echo "\n* broken file; allow broken; non OOP\n"; $a = RarArchive::open($b, null, 'retnull'); rar_allow_broken_set($a, true); foreach ($a->getEntries() as $e) { echo "$e\n"; } var_dump(count($a)); echo "\n"; echo "Done.\n"; --EXPECTF-- * broken file; bad arguments Warning: RarArchive::setAllowBroken() expects exactly 1 parameter, 0 given in %s on line %d Warning: rar_allow_broken_set() expects exactly 2 parameters, 1 given in %s on line %d * broken file; do not allow broken (default) Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: %s(): ERAR_EOPEN (file open error) in %s on line %d int(0) * broken file; do not allow broken (explicit) Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(false) Warning: %s(): ERAR_EOPEN (file open error) in %s on line %d int(0) * broken file; allow broken RarEntry for file "file1.txt" (52b28202) int(1) * broken file; allow broken; non OOP RarEntry for file "file1.txt" (52b28202) int(1) Done. tests/036.phpt000064400000001001152347044110007104 0ustar00--TEST-- rar_open() non-existent archive with exceptions --SKIPIF-- --FILE-- getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- Message: unRAR internal error: Failed to open %snonexistentarchive.rar: ERAR_EOPEN (file open error) Code: 15 Done. tests/053.phpt000064400000003211152347044110007110 0ustar00--TEST-- Stream wrapper malformed url --SKIPIF-- [*]#" in %s on line %d Test no fragment: Warning: fopen(rar://file.rar): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test empty fragment: Warning: fopen(rar://file.rar#): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test no path: Warning: fopen(rar://#frag): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Test no path and empty fragment: Warning: fopen(rar://#): %cailed to open stream: The url must contain a path and a non-empty fragment; it must be in the form "rar://[*]#" in %s on line %d Done. tests/087.phpt000064400000000647152347044110007131 0ustar00--TEST-- RarArchive read_property gives a fatal error on a write context --SKIPIF-- --FILE-- getEntry('usr' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'text2image'); var_dump($entry); $stream = $entry->getStream('passw0rd'); $contents = stream_get_contents($stream); echo "(unpacked) MD5: ", md5($contents), "\n"; echo "Done.\n"; ?> --EXPECTF-- object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(18) "usr%sbin%stext2image" ["unpacked_size%sprivate%s=> int(147528) ["packed_size%sprivate%s=> int(57104) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "%s" ["crc%sprivate%s=> string(8) "83c9a6b7" ["attr%sprivate%s=> int(33261) ["version%sprivate%s=> int(50) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(5) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } (unpacked) MD5: c07ce36ec260848f47fe8ac1408f938f Done. tests/049.phpt000064400000001724152347044110007124 0ustar00--TEST-- RarArchive::open() volume callback long return (case MAXPATHLEN > NM) --SKIPIF-- 2048)) die("skip test is for systems where MAXPATHLEN > 2048"); $rp = dirname(__FILE__) . "/" . str_repeat("a", 2048); if (strlen(dirname(__FILE__) > PHP_MAXPATHLEN - 1)) die("skip current directory is too deep."); --FILE-- getEntries(); echo "Done.\n"; --EXPECTF-- Warning: RarArchive::getEntries(): Resolved path is too big for the unRAR library in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d Done. tests/025.phpt000064400000001260152347044110007111 0ustar00--TEST-- rar_open()/RarEntry::extract() (headers level password) --SKIPIF-- --FILE-- extract(false, $tempfile)); echo "Content of first one follows:\n"; echo file_get_contents($tempfile); $stream = reset($entries)->getStream(); @unlink($tempfile); echo "\n"; echo "Done\n"; --EXPECTF-- Found 2 files. bool(true) Content of first one follows: Encrypted file 1 contents. Done tests/067.phpt000064400000003001152347044110007112 0ustar00--TEST-- RarEntry::extract() process extended (Windows) --SKIPIF-- --CLEAN-- @rmdir(dirname(__FILE__).'/temp_directory'); --FILE-- should have default permissions:\n"; $rarF = RarArchive::open($fn1); $t = $rarF->getEntry('allow_everyone_ni'); $t->extract(false, $dest, NULL); exec('cacls ' . escapeshellarg($dest), $perms); $perms = array_reduce($perms, 'concat'); var_dump(preg_match('/.* Everyone:\\(OI\\)\\(CI\\)F/i', $perms)); @rmdir($dest); echo "\n"; echo "--> should have permissions for everyone:\n"; $rarF = RarArchive::open($fn1); $t = $rarF->getEntry('allow_everyone_ni'); $t->extract(false, $dest, NULL, true); exec('cacls ' . escapeshellarg($dest), $perms); $perms = array_reduce($perms, 'concat'); var_dump(preg_match('/.* Everyone:\\(OI\\)\\(CI\\)F/i', $perms)); echo "\n"; @rmdir($dest); echo "Done\n"; --EXPECTF-- --> should have default permissions: int(0) --> should have permissions for everyone: int(1) Done tests/secret-crypted-none.rar000064400000007334152347044110012316 0ustar00Rar!Ιs (5R ѹ䎉Vx1@~V[Wxd]Uves05_QqQYCt8*-}MxatlB1%9[`ևPkT| )N(xn+$8_LV[gϨTET! ;i֖ bL('KmUM8R@I%g{u9}pML$H"T7 VڰQK,5 Ky+?e7&˽E[RP^mڶihi}a0`Ahq*zx[H׀2{룈p_I4†GR@;-xgM*#u<+ }O" ݼeL9Nanփ%%w!\!PWV>8a'W;'5 {l0-.)_\֘ 5*z*Dᝃ5XmgGśA)%4p,+{@j |zX7ףּP@nu @d(F䰌/B[D1 pAAx}>N 9t>{טXѸ=2ZANkڂnsmW+qJ^"V ;" +[ Ʒ]Xͦ0c8ؚþJ"7*may%C>7r ER[ GN[Cr$9[~?9DLOۡNYnS{]M%@4jV*~%yҲ@=Ȓkv0>ɮu:T}Z+Ӵu3w}0 G4&۬e$:ZH5>,! bO3t*@P= qG9L+[N圓ׁ:lܼjA':k%/D;jrn;LW43^5]yn|~u}W1Z` d Zj_Q2&,A]*㚛[IнjՁ,6цzEʐ %Mꅀ0ʞxI९Pl~bq,[XCĸO_9m1 OqGNKn_jD.ZAZ2oM_iYPh]S%úl`"Aj2+NsYzSt=0%Jپo3,^qHr3 JpLbr2XM k"ldXVDN4go?Lo1^ְ+D iII~.~]:iDHm *R_O."3ߊjem<>}ȥXiҬ[;gK$%X#w3sa(9gl\/n~_Bv7!B$S_USăTٸ iO_sB < I'f]\R*E`kp H(5R n쎮dXgDMt3- tests/rar5_multi.part1.rar000064400000144000152347044110011525 0ustar00Rar!l ꎃ#d\1Ȁ UYx usr/bin/text2image0 ݣjҿMh[=9Zs O1ïD`wd#V~t:gIڬ-9M^YxRͽmsUG#ovӕ >Ux拣zIߒ#nװu^*c[Jg8cyy&{2Kyr7$0pط}ݚ]ۗ ).U(=abpf>շN{ ߧtq0GѢyсv509q%5+)1sC_cmL_/ckP~cܧ؆]h_rzj7QOw-F# =QhBx\R)Hٓ`nsByжiߗB7zVpMiY^iﰖ;]~ )΂ {* .8З}~ ;(.-rODٙ] cD<@4%NQzjUz+|ݙ; /0iyh['R>n%`SntYl/)g֪:t8Af/`v"CF-@5z üb- O̯mX zvsIX.j㬣w GfiոHtySз]،̚e>ъ] ūT]tKhT$Z%u.+)24k>≧o0oT(nha^$P`Uu*˟sAn0fRMѴ/tU! eu > lIm'*S&S N$QƫJfjxS$ΥA_;ΒC& OjxV\ʛh ـr+;KY,I5{žϪq-k[I0띇f5]qf)g Rw37囦,fҖ̔-n*a8L5L{d鲳Y$3yXJQH nv}8EhR+\|o6b=] 3<+7( L1lO6WRl7YkD5@9W00J]je6bOF7: ?s~Vat]MFO!Q:+CsƉTu!fh(cZ%/*֨{U *iBׯYǓby in! Y7C 0DY,oK36Q_y>cV'Os'q1Fr?nRA=5*p"OY#MGAr isiU|VZZQn3JD2 @f& _ijle ɈN}.:L1#jv!W0X!aiiaz?Ϛ98C2cLOobɯE&KH8]Kd{920HIee>wLv7wK/;7@YhyJ:j-,R,;vU(<f ?cXQobOZq+KK32mi=(Ǐtmۊˆ-fMگNcc?\[PMJd0sW[nAkZkc7\bEF 8ðcU&u 4ͯ?RPzLLjLLȉ'!yZ o6!HՌ*%z䭱^7N¿5J%sMT&H2q4m0o~u 3XKԬ@yGlX,⅟NO9q !-acW0ti6@b1" w|)Dcw3BP"X`gd `83eA`> rNtNfpEg'Sdz %~4>f|܍Y;-4 ]%whGl%\{'k#J{8a&&<&==3~#UpB9m42+VSx:TxcAJ́ q_'pE0$%@bAJY*åw?5)2"U 'Ry\2l"G ͅD5-EY- XT QJ??͵{_ω3H@tpJG CG|[u51sved8(ILWc"9(t"^8tZQ>}) 0&oP4K]榢!JL1g!k/ BL a zua(6Js x6β+朮5l: ۙ0;rbӋ%etMvH qNLR1Gyj'.>$ۯMO~N6x }n?1tFGUɨc#'3!կ5cRbrRo:JIE0ZpqS]$~݁l Eo͇ytTf%{-+pNݔ)GJL )lXj-^;)b!P{kFlizPiAfn֞=z Pg -n%'mIY5@ZKVC'l0-_͂y"#! p&W3WlS%h=Іz )pbhIDiW2]ب{X5}E:p:e9uT:0S<<;xlT:9)WĤ\/Ii6Xb*OCcpgQe stb2|C6&9(hzʣ1W,xYBccl`M6P@53wG"r+4o3q^R_m.vBz|)O:d؜'.temԕc֯G,hDsIm_K f8u4rhO)s tzKа(?ܒ3;X;>7IyU6zFi+ѷLQ~''*,Ck?)qa(˱x5Vax|'/҈y.^>~ cY ص9׍)+|-a6\woJTT^{+UCJEb`.mYm!RŴ&:Tq.p⯢G4!~r7`+zg 3XdEV(xK2N7a_dmL Jܵ)Fp>5fbj_w4/0ֱ~eYa PY A+75k)cLt٢-l︬[Gh6#EnQH]| nԩ)P2FGҏB^+kI*\iIT˲#G l2ɠGZuf+XPlI蒗he?AA4yq9d7jv\A!څUl.q>|RL4Wt:^Ѯ.P '] %?0o)c\G%mYr1TRr>z#eJ0`ԡ}4てԔ[?4ڝ@w8[ycL&9܏NeYvX.ZaM4]Fug@Ȓg>;[h21V?.ƪџ04WLV~E9Hj!2l(ӈ$GDy#.DBxD}!@.`XEǗ+\m<8%):BAO?'!l"^#GLiۣ#HV l|J[^H8J2_-Μ&]Y/J:n ÊEs'IDcy9ﲆ(uգ̘'J^Yɾyf@ͨ_ënRDM9_yz9FwI`/ hKHҟe)BGJh<'ɚ8V ؕk''#R=+e1E5L ,@Nƭ9etb=,hs016&tȌ<㬲 T? ȸW!`ζ?EuQx=;eXG8Rd";\NiQ"lAX#r[a]^[ 0gbHτYS~ԹM;CeZLK3m Pł;XTă]וMEqpHg52G۸QA2C&)<]LhŠTL̐$-021nd'rk\:$`r+ȴM4Rז5>ݣ+v*)8 O0}k/XV2pqpz-<2DoJƒB;UGOUkBp8qFV"7u ߒF6U/9(*5kNӗJ̽Mre%MϨ2I%>4 ֹq9ݻ%iývwaߙB"P0(f+,+r?Y3pB)$= цtIk.+abA3Oe>vrʍĬpZXbGGBtՊlB'Fr #Bܸ [͔[ C'vZ3Y/8Υ^vdJdKܡ'sEoFJ~cÊ!%3eG:Nh*h,ܶV^g&&,.ME4.-B ;XOn,*E(Jm: XqoE|YQc.?oHx}~Xu{-VP"4KtePA N-X5K9/Zx%PIwv1y&@lʔ/'}gd)U7 ԙ.WLDLX5LZv_a:|zwqU0E.OPP"R I%JJS<{0cɔ9&oyWWFT,B <PP(BDR*gϺMA;oJ 菙- V9X- Eo~"qe9xI|eY+oC'EqTX1 "|^ @}`8,Rl?[rM:ST+a+MJdMuh@8:xF!:u{t)~-Mu.$"]uPS|0J9# I>K/V[Op3UQ-fӓE7c5M~ /K VzlgsoߪeXelga; F^>/x*S!b9booy]yJG[_ooߑL-[Ss|{0p.ɈOi`W[3u'/]9Hʝce\Ed!7%xf]*pcgk'M/ed;Zi*p|K ׂZpw엚yدl_1hQ{o˹2x^y x|.UI#d˸Yc{͘-FX,j4$O KjmpX07D4F5TO{.M>),TiE ~?+x7=,~M>dz.Q&-t`Dj=bi>Nk#fÏx-NS^t:H=qC`&^~[;4ܭ!(Rw>]p$ bޒ̐F(٧d fۂH!)W߂zT^P7`~+LRqZYY)56KU_#B0eG#sloF󪊌)Y: SAU$Cy IC򚭱&[Po q/\¢K[&`zr"z?.%!CaW(W7&(}l"  fx`O:tN# :mIlXU2G:>@ۻcϿ,B|=Lp/#v&Tk*Wpbpz=蛳Y~ov8 K$6E.gm]o O{>/"w$ qy}]);~`ִÔjm;q, o| ^:[7VfYŅC=6E'/' zsnUrXФxvI O382p/,'=n5 nSe -l5smos V eNq)m#^YRП0T H^TK0"4/Myis5TNnUNkly4@)g̺/&?Vѽ2=˯bm{$C%S݁p8ZtTb!:ޙJd`4]t'Mn \MD_߻CS01ɂx867,C?3aDr 0 )0wY6r4#ǬGF2y>" Hpe{X ؽ2Wh"R'hxbޗ"Ej}K_Aggn;V<bt=ؐoޘ#,:BJ^2+ t~8I;'ӹJ vɶd}I䊰ܦ7,ۀt)0LV>x?pNK_g&Z8Ow C#$Rw'3 K9n,"1 T<"TĮJd]Yx{?M/Kt¢4. e}V im kZ[ՙB|콜%gY{0Hu!(Rt7tȞo/DBFd0489%KU&~l%wg, H.ukݺCǼ=e͢H Ӄ6\O)MiaTc6n4n g`8M=m_SƊK5M,=uK=a˅eiR051\pςgȨı7Հ|7Xڂ$;pRa DQIɌtaJ:jfOEg+u6uQ#% ը}Oa);މnRÿz4nij. 5Ws>%~]nLP;DoP$̞Ey7j8S'~ģ:HS`99+(94ʟ/.8Kb_6˓̧֩ E,hB0X}J$ɕy+6Tsv\ u?G>vΩb7TvlhSc bHbva Ƭoߔڂ1EQ07F :40!a8Y=Q귆|A+ocL<}amS3W,I(w")IEDWpƵ (܌I6Dt}  w  6T.)-CkשR:p^VP9}L,fg*V`qG@9~8XTy_<?պR`*]T Og˒^kچwDѸs?9E@tt\qU¿F|J >_3)]Rp*^Eݬkj!Vn:W+>g;Avy01u+ ],<ĸ%j>P]9{T`hFҫQDkF٤kn?ʨ?GzZ]KAe;XGʛ!#jg'?pB KfwYYn}V;n+*' +n%Ĵ6-_N4cJLQ"]9|FiU5ճhƨ]#CsPlV_|O//Q2K\@镓0{\ͺ˪-s-v!`P-l:d)Ry}-ɟH~B(Jw29K9괿Pү=B0gJWH}&14̯H01q%gh6+>:_ϱ*%!5 OƭĆZbcm6-6C!>>Y[!Nɘ %5o aދ̿-T)`zDy>)%9&[5`wTܨܦx%%~뫸W 0uca,d7S լSOjUHۋ~  ew$\VZlv0!;~jfp+B%9i@b,D>@i?a=KuCϖI#I1uyMG&VJMWe )[)Q T>^ OJTTxUatU\0usNub+#wvgMǑfɂ|hMmPZ(a2X6yAsmV̳ۤʇdoe3 zTx))u}:,eA\ɶ@zdpz02˺ /˥Uy(|Kb" yI~֏70!sfW|^]I܋n)OH|dm=)R I tkarjsBOx{TwRv>:Fey:k: (bR_L*H;7 X7͍-YϭSG@vOZxtۮ*OY,4>e*KޘFA=2ATHj*}s-br]' .J0tAQ y8ڴ(HaLLc_j_YdY4\/!a6Ghij[%lAvP!iP^E& 5}Iv^5D)*\s5)BZf5%mH%t7 <-((2; bC,{2:;x`!gO^ 5lϗ!vW܁v%wN2Y{PO6Ž  U lgݱM͜,%R&l&XB}nn9,Ip5s׊ H\TJ i;cWQ1i..,~G?UOz5xQ)L=qpbӾ##!Í !klplm\-Z |YI=N$#/Q?@dA0^euܧ`OYIfHlhmQjFoQ%^Q*:H_:- f2HƕFڍfds-R]VaX49޸GO FW`W] D4rԷlLzS>t_V~XBv7S.i׹ge|{s v̔Z5illdd= 誗5tb 8-hBr}j앵ÒapSvȽ$5+mxӎ-.X>,BIǾN5v7ۻM5£pwBr(BfKcfSEeѵN΄4w4M.Qfܽ<ٺ*I$Dی:DZ"mGbF7&eC'&w> .`L/I2c%q8:ou{n_I_A{{cs ~NMb)_gt8=B͠L3+ 0/&$ID%H%î}'?~Wx UH K..]"O^İi?f '_4ZC?1űZ0|mP Όwڔs5G=`IJ85{jWY1Gx;kZ#X72ހ =ݔ}z h< =Nd!D&LdXp〧M00 `Y53%C`(*N4hߎp'_yO G"6ZQWLUpp]) $y&-(L5R#y!SðsYIjgp9M n }i&z]|*Y w JAR`]i}r1TK{˜#6qP,/^7GkR)Ti:N i?C K0hBd !أ* e@ĩ@h,Qj$7*bM pN!*z*<;M&=(T'}9.]Vtt_ˑ|sq8JnLj)*sBj\Yb6B5qif.C_ Ϊ?T(}A tc\݄7ZΥa^S7^fsԨK6`lQǼ[~aF)pҠq$W㠽Bfu[@fpGmq=1 .-eS"@U^9N007~ӥ )"~_KzBB&9iaR[㻼)Q$|cJ볺0P3eai vq5ɣ}܋) y  tM5-iB{xKl.b!, w.? sZB<yÀ#+|OlMgVGeqZL^YjsݓlbPx̧=ʲ ȣj^]W[SըB&!N7Y=%}k,iT|ljJ'!\e+l,Eؓh"5}s & &9'zJR,CYWcί9o(x? C^V='{Rn[${3)#Ff2TMg}(pqz]x p+b lk]75/kt7J˲P.ċHYχXw[,`'w~kJUFQK8yRtzc6+su)$?ʑPg9ȋ8crKUF#PT޴mS1ka)9)"~`̙x2d.Ɉ"ymWf5_*7$Py b:xG6}mk}CJҳ ?y n9mz*ӳa4~ a53xQM[2}0Kaf3?1SH,KPFzfxd7];xw[ KjW3++G,Ǝ}[Ri΋JҽF/厭 D۰p¨1Boee ^JD=G$:sk>7?qGB"CuvJc2SSTQ 'sM94GKYq"7gXP*yc Jq;-[t)"VC \JJl̑>"Sc`D u\o}[\q.zGx @62R,iAsU|2kD')IHެ3kq µg'x%kg"bp% ڠ(7!+<+K@Ua@^ӀTF*uݻ\0~Η/kg`We1  r=#Ą8osz? vikDS6 LI"N0a6dt ugT\ +F 6rM{SJ JVKKmD kT~8>La'.y!qYM[nո|b|瑋4 ׬n=fQl$wy+Y2/o;8ug91 *?eM)wj^b.%&q1Wbb߉2`{ϰ5!brZ1چ/?ҒKU2ǒ,R^ގ樐ΗTY$ڡK,u"ݜ^],UTGN[Ch:UKNUXs\Sq$ Tһ5X =)Sm+e]ʛu8/;ӂ1zXLv'&\ Z;\fK2n[$sP{kZoOv)f"'^/CDC˾CtE[6u^^XdxqkHP#Ԙ oY0!molo^{_E^06䮢,uy֚+E)C<* =MN,Xg!2D?gKVrx4ߦճ:8n ru,m/sck,7E1QƶviHOj /#%1~_ e FftUR&eAMu=t<̀tah褾: ę:1V\S\, s*D̑ou?އ&2&1?5`9(xR fA6 iV`bb?ݲqŷ-wj>&ayWOz @ HӍd"nzu1E܇~u/}'ξ\r[mm-_!Xk[X,}}Mр~~r'xc44z`mB9ܙanwb\O'g` <9C]-+,i}*8Uq`x>G uFz6F#H$o P,e0In)2lw?*zϊl"fಜaN'DNw굝% hRGF *W`kZN许%{3,Z*g[L=Xh]$V(bMT x{J˫ ƩC_eXè4ӯ 8RZUc4}B&HV1/9 eA\AFDHTKM:xK<;Gr#7LMoiLR9EF&6WԬ#ϕ3Zf`4'D{&t^)Z.ݓ07!P]`'m4q2aϠhM`bfGܰ=_ zgGٔwr9wu{glxs#4lw#uxj?ۤQ;J55ۣH4ro pW$ J=5lђ+uAU/AǧfP}udk6Y_B0X*G/(5!,bK`I!MpOSV'e=#fکyNy쮛+y S4agIE>ov[IpTX#`Q4S0\|U2=Ŵz KA/3&, S_ GqI(]*B$UU>ig˷IE9[`08w$HqX@!Q2(KAnR).nC0W{dZgS$soo)?Hpa9I%&b4I S)6MH5xw*`(qB-AQ ozmy6$6ñ-F5'?|!IŰq\?Cn}1(|t NSA_sVn( >rX cWCPɠfI^%<^<|l/0hJ%U AkB,$iky3}T0c~'O#2c #E T@k 9Ja*7-%n.Eiޖ$U.NN 1$((LZgJd\=V1}\+\O,r$%0y<{0҇+'ߧmqR"̞^ Q ^nvJ[*(=EwX3Ll6X9ߧ$r5d]h)xF]=^)9cHɘ ܨG{ O n ^hQA7'8QNH":N~gonX&{4!oVǤ|Wk-"FU[ \ NAfAjbI*Xo=7^YoPA3d$ 8Bث#欉d<"hS7W}t="mqjGZm XL:+1o>υ=˓^m@YjOG[`+NjǶ<(K(0%o^Yjj[}2FSq+~nww_ B-Q# CK 1@?8y͠ϏäH<Mp{)&0 }EX2% T˷#- p&뎞6#DD|-F,{\0&ތo[ pw>#Mv;xLTqeD *Op,DIGJ^б2^p~r"NwdIn]8Qek 8{"ˣ^.KS />>2jKWkJAs' "BY |r՘!ġohʼʕrSwkaEe&bBF[~ӚFBUQ@3s#}OqJzkpƄ44=c0[c% o˴ 2r\Y!X.ib);2i<|#8D]O}~-r%o(>ẏˮ1w0?(~"I7̞TFbU5oN\RroKNAOCv>7G:6ي(#Օ֬˜hoE!_`6Vh,j\(6sPC),%!g`u#OVP_`]Y>n7[0,XLm59EjFlN`C)*nH'Lu1  > 50}*l)yl߹,ܖ3 h^d;]?8΂x'rn'iK)xC[(L =^")dE?&Ϧyl2 D~$7V+tpgrheb:% Z{k8myڿQn)UxV:s1Mgy:FxW 6zPeta?Tp_ {xΰFI]JL$9QlmGֈL220-5k+.匂(0"/AC1̍VJHNF[RHbm^ɾfeVghS|MD[.-ac\6^ul%p+7.lʃG/O}X%lQ'0jn)AJȶeT]= )~5cr*4;!J^i. W40kb9$?qo+]k#;)7{/dW}BmD=2&:I )Ab@wKm*j LO<53bX FFl e߬ɢUӗ]gҷU*_7j T4%'\'{ϒO{5`U/+ev8ŲfS q:_31/I~@-gYxxE};bu/d\FpM#ydViVwj{<-߼mQK`]]dAD4O͎)d |@ZC¥B 9V ^4sO3ao>R D {?6ZWBFlWaKz*oW%r< Be)K{qƌ̀4pRXjtlC Őę2{}: :\)⍖GoaA )xmj2?2Pm|wQ 6'/hhTڍaIP*#ye =Z2S))/2{)1!F5i#^?/\_Ud"=^MWk*Q5^1^@-ugЖG nB cwح#2fg1@')Qelioˎ[931&W9b+4vħ$j=(]:Dh/?-ӣB œ,KR FV6I $Kk\_<\f,`C!AwCآ& 37K`Rky!^6J?Do'-4~B P0Kp@E"`nWXx!^쨣O jDu4 ^u*<=G,AQɩ5 Ζ1Y/neeʛ&%k@< \<|7ZG6(E-r} qCR1 Ze-Տ 3 [&LSShQmWoR1A/k DoC7KtyP]AZz}3|{Ghw%f]ch``x Wܕ賺tRj5Ukgk֑yjN,U?2&yH8EYAY5gWD2;ǨájcY-w+у3D{#T37fr' Y. aꑽ5%Ht5O-kn|uut *Aw\){IVV5 v* H+4*bu/ϒXUU 8RY^rV|wS|~w䊇$1=_6Q%=T~:O+C~Txz}y?fzH]%\OcH>%\M_)E?:ٮ?۹"sP5iȧ`,&%lu0 -4*MPӾGQj_y斘b(*t4!D4 aFV[Ͼ#cQB#tA$tԃb)?]bc%<wMۍ_/ i~o:پ,Ra9t?I* PoN*71wH~/@JidJ!C .~UEcSDʘެ:wűD١5iCVa<_ߛ)uĹjXN_+!oA9VhMAV_&GʒDr%|$V'R 3f<)Tm^QL% vF 1mvڑO, ?3`.ス1,m*iK8ҮdWIowI=-NC?>flmawtQaX^hVPþ)ÌDv<'-t,tȑe]d*;{0U mp@@C2٭%ĶnԲ"nN%[QbޤD؉`\+{ 9i&$V#M!yw:@ U[F(rG#/cT:"֤m@/Ɂ̋}lg@yv% t _UGqv`M'|ٷA'¼شиiO}X PDljZ{kYqS:@02QoE0 TJ+ %jK)m>+{P(Kp3 Ad=E[m,./I)+>_ijer&“9VaڽʔWOCboLXQ)(Fڸ;>$|:,4}<c"iWBkx4t{i##\"eʄX2kZ VHwk0&<;]Q &PÉՎ!K{׺!Ej婟4 ๿k1Tg|ly^@߹\dԆ.y_-%lOG#mX^chy"Ai3K)i\/Rot&gM+|(h@i8 Lv (|gQ\; њ8 r='Ś:C_IǛͥy,a>KTf4h7 e_v]4aki|j$~W"= i΂#]/CF@Ӟ2V@%A#; -:~WK`Ɨwor5W \/yoGf C%|? ̲^~ "Nx+d'P?2bPaa7sR$_E8KM&W]|d[QA OtX ( ӧC\;zt_9۔୭R[ZQ6Hȡgb*-ߤM~NU ؒlЏ=(t񊆝AGyyn!.54*5JRD %lwJ4zOoPgavxQQAa ڈD'- 8 `uR/mB?Ju37Π]b{kl1\[S9' S1-?4Ugz#Pt"դXbN\m;?fqyOqӯ%ܗY &K)=8`K <:2*"Gm[dt:dyѶVS_?/ѩ֌%X/!JȇER#CAy h0okNƹU\ܪߍC!22tzjbYgIˏ-'3ˮHדS\p  ēҜ3R¼\KG˵{kVVbc$uǂRd6_AUXsjq~"*}FѾ.#mq6asMzmnDM)be4r;qzΚnT-Q7l_k򁴷({I.Ԕ3k3¨7l|e5׉Q Kh!t_ԛI^z">eckI%/X-Ć!byfY3%hzxMGeSM%w bCv'R})ovGƔ=Dž1)σȘ}J^]V]}r$*yҟ J3 jȬ;(^ a[`~-;U^G P 8 r{8{}k_.Μ=n~Lk$P_Iq!Zm2j+)ځig3g)Pu CS5[tC?-B^_e7 \g?¢.R1pytRmM( B?$/E_&cHH 1GDK ,pj- sQpK) & G vDC:6,q3ɵ-I'6ɀH صxULTG<"zd|$?`"|6䗦ͥtmdy'"r9(HgXFH[[]0}SPO M +@©|]Ph>Ǖ XKF7m¿k/)&yQ~,¼t h{} hV(b38);u\L@!k3(OgF`3exr<]ɲğ(pBfK[D/ӧrzHUsTI]cvXU CWVٙ#ͮe1o%--m}+٨0{U:FvybzL$MWTs8M[V96Fڮ \Eh~!z 骤 #B.$pW;r8"Rk,H۩l}6n+|8q3}%^ mwG71 b.l"8; :R.n)mߞrpgDq.+S߻Ҕͫ%q]X,UFP⋠orQӯd2O%3qz Σ2c|2]@}*e*-,@o%(EdU=~a99[H g,{ʨ*ܽv 5\PUٿ^ԑYT/4ފՇpAԅҴIh>ˎiA2NT F׵- ԑyrhg]k|ihTWeG`[Ö* by ?\\dй7}(</JhU/۠+bRMBewPm8u:6Z"M=G$-~<C\KǁWK ffH\$%cb9J|@jU]KA2b|,(mz؈CE'X Һ+}5*[.ŎK3V\1AG/҇{Q%4$ É7դLW~IF쟽mtYE)1UG& 7C̱d$!I|8 p1`"y]PL(6Ư@n qjg[*ΔJQ*,NG]DJ B ~^4hځb͸$p`f%Q ơ ۸xD_v h %ƠZb4f L׿ܼeߩBsa2pRS=0u|Z(!\pu6ZG5E)u'z@B~5_9\YSX o} Mg_3}un==]OI?d;.F>`_lvHZ;Eq|ۑ. pO qe8#>q5,Y(1) %;uk%8Hŕj'2T!Sk9cΥ~?lVG(!eH;BD]B;d&h<Y䏿*AQݏtKfU 6WG Z7bF51''*(3um-72᤯C+Ĵj Y,pD+ šL?|Vn(?:P_O}Ts!yʋJ= J؀M[֬bݜgCh4cEFU|~E3B?kTjMUyΑv7_ yOHl%7O9OR7 uǭh-YVvGΞ6$*B@b+meϗ8E[ V[_363]tLܿ *ty(W׽)^Du#w:`s uy}G^$pW,b؊ګhc9R:.6<w?oV(|zM,`@ yكb,#WJ))ە Ky:|E'fa57W6j_rz D|mO\$> jeIQ+t6wء+r:&HP! Nzo:iע@2(y{+Q@2Y%R %ZCnj>4s5/ցgu$t1gnKʡUKMv/@-Dg"Rj' 6uEMytFCp*1C􈗕n#g&!D䴡MxQ܅H䊵`vu>K: j:]G;wl#YF9|t05qxbbJ\C=?tD_V,‹"zʄ%\aJ3.fUY2GPhFrvtG'@n_4(7J,];7ݛJy.}v΃r!r6JĈ(6[׬S: 9EIk-|eN3RM4)ūWO.@UM|v갿J&.}`` C<kc&:_ׯ^S9 1M p,0^໴mP;X,܁jC maLpl!R&iG:5.4V-L3& &酵셖7ιU-YzZnK{N[@j+#S,)pb%6 @+,YO VqA/OVd2\6fe*.9^+yLřU]e3|=ŇZI~6 8Jm5qR0G ѲfaGsReD/=]8izէ=(F&ɠP#īIZXsx__Չ %B¾īC]${f%@VzqW*MR}nE6Mٯ\֏,˰Bd=mav;[ͷ̢{FW>q1f5Ay0}&淢0Fy;&x3.5Rhw͡׍[{4=x0N\j̪2Igm.L$1'z_ƹmKW?b%*vogE`5*>K_-K.ppRҪXbNYgXʅ%_W# -\f߱^pB@b/\Yn"wrĮsl֊ۑhzOS}"Iutz,J;`Apk&_ 3Խ!̭v\!qt6U!zCɁCVCdێG+)HWQUj*:ovݧ ~ sJ8l`z2 *2i% &loXIFhYT[Yn4{72QD&"Sosmĸ>_])'9}P>O 2^#<'}%5>D^*tD:U7&u=#=թ5#璾\J$C&͏Q qmIcz`l tlz%pJc'C/8  `jw#4Xa 4^\Iƴ.2!3VZqWYxZ0Ģ A}vZ//]۲18lc*ԖvJ_7&GЉ * wFz)HͅpN?\f %rOG89SABP;N^yOf^=DKkV}K.MYDӜE(vUmv;o8ցxRʰى`ۧLYc? ZjΘ\;&\3Tu$I}cJ7ڬ56 r[5=J!wGid D"j1S4xB pZ!{Zlةhw}Ics [,;YIv.ǜ+Ңz] p-A*#b)q>ZuQc`J?IBgjyb*\l}"jASyZ+4H/tOcA"tz&<"#.M{9~jp'+c.9:~Aq%tQdC ` 7{%"H!sY94%ɶK'3&^ҋQ:LE \⼜م(F,-GݖXڼƧu`nӮ @Ⱦ֠U_d'iv៯17Fq#X(,>L2y#ÃVC Ƭ.zBA@.Uy`j%z"]/3dq C(<s믥xA]?iOc'DGb6 +.Պo 7^n7ß*J?zn.JbO]1D& NkDXn՟MUvIPWv#uc$ZwH[ӪRwlQN'qsBO4N.QHʊ]fQTԨ8 yD(6&?#K*I';q=@0v)eon;˓6Dn#cE'8`B?Iz% SڥFm϶CC* ?Rp7Zgr_ݒhWlAd6x(b7~1TPO1%nq|>lۉ٫ ,Xa .xw__"^>+L“y`f653TUk?"L#/.XDRˢZ.X9${pEbjߍt#xؒ[pnKJ=ܒł kh{&5|ة\o<0*FB9}W#FbqwbP G X-Qy;  鷑yŵ O!4`8ӈ !KH1̈|R-r sV~hPΌO'ka zC 5tew8ŧ~Bo$+{+Ÿl܃9eAç r0w1nO8[n iwR)ޡ:Gl֘T~$ 4cҧdUk:_4&!G{pr&+@'|R,eMC/Z\T\{Ztq$ b KhM_gtpVP/iB+Fl2Cdb^ o͇+\dTX5$"5BK^'ڠ7y$q#ĐhnE{P߳{IVL6i <%{ {PpDi8xI&^Ymac ?< #8a(>y VSt79v|"nݕ~^k! ~i-$DvH\JZ"~l(s^¥4gc+wAڦw8`QUj;(5B2U& (@4=!R+fUoAHMQhl7k$ذi1W&bP׈ nuZ:Zx_Yi\vfu4tީO~5㓨 of'ߘvr؄@JtKIc?t!JL]?s HfHm5mn0MLM+ЍZVlu:Ȭ FQ (L17qR:2տS\3"|~E1'hX+sZ`M̄.qM2AlvŸ$?7) S2;43JLr]Uq%QA&[q?>["gI~[ q?"@$3[7rg }Hp ܡseq?PgFp )-c\m:\sm;Fhѩr:D);9F8`{- ógH/Z#`Ɨnz=M°I]WE=ͭk R va Owp<_o8 UK!8f4I5`]yiüj19ds~xNp~u(o~UXfhQTv[':f}+6⣭Z^Bh跓mμ?oq?PW;ZU/QZ>>؇|?&3Fm2Zfr/U9 `7)[{A7PĎy!H.L핷 ȩMQX !|U_{;BJnb깃Pe6`Q.^ )wt"igDfD+qDRwOaRUй0k{TJ Bx]dyJJom[D}2O;H@銐!ǎ,!@KItRչsMuh 6a%ij)9.w 1}Ѫ_(ɕA ]N]>Fst`˘86]ƲVlrf*-p1LoTo`./GAgO2h0xl,SbI~kD;c.QT(].3E?ZM^FЉt2Yn/scY 5'~>wh2hzgf-gÑnˁZ5-e (Z֛7nlWپDr Y2M$#ڷVrXgT~KЏ kKۅq|\{YgŀmGNqi<{qzDگ$.A"qHPb4"S"[RdwN.7 zHѷ.?O&YgRmrƝWi $aC[Ep; ?XGrU}W WGY;XGd0mEMK%ER AZvZ "5~ͦ'1PKZ.g7]ʰ} ,gdm@[#hËL ~;2k,crS[ ">w*~0,Z\a`$k z?Z1=S)m^=8!ѡi/kDgv)NeCᮾ(3&)rSzqd~7z#rOBݿxw1K5}TWݔ'׼|Py1mPYp#QS 4A Ɍ\"Ǐl5Ed}v?癗Fu7]V/bi|!JT511*̥wڃ3oM$"ӳ$k};$OMPQaMg_9`! Ui>f#>e:w{!3ͅ, 8h /v4uq&<\k@ߜRkQ1Le i} ~,j_H2Q6Pd& l`I|os =M #-1v\lH"9\Aqdgv [ ~1.09d{=2iW^M>I/"=a0&L)EZ|}| ӞSoUHuWw0[6!޹TAB?iAC$69H)*E!\'~K+k7v`6e?L;5;w9+n=!Qk#y 0鸜e z*ubj>蘑mkiRV  P 98I{>HA;pSG(b3OҞS ܷh]&ffʈ&(?z5t0 pgz9؞ς ,ȩ +)~YWr~@//TKw0 T* ׂWc#lVVO+dh/\Ӵ❇JU}e"7$Ḇʫ]N$(m0nl\]ՔF@ldaFf% !Q؛R@ʳ ]ʄB,Wfs }᲍0Xh `e0Ruo8K=佞=TN#/,emAӢ|TT4phc6'?c>ò3Oq{͉?+{us{}x&5p6Rzhi 6~ *<uJ2`UBp{̬VI11:wLs=Vb:j aM e'-RçDY HS-ʶ UI* RęzkXq$sFev( M"՜LJfOTd5eCMQᛒmF>bX2\ΥՉLv\e %*~;īn<.]Oܨc0\-Z{źBgH7Lx.+~ DP?ւn` E9{f]  l8,B{vzTiѽ&|;gk;&ZP= MH[`p1ߟ({Qݺk*e4=zX>]4{ Xϼ;밪C YBdnG ̞|\[FP&h6㧙!ϭazVX>vח_5X 8/KysAg[D+}X\*]Q gm7z_>r6 2rY A@xJ<ůAzr݅dΒ$0 d'҄Fe\$CL1&ܢ8:1k4' Ohʐσ=2MjZL}RvxA(sa 9JW{m2B $V\l}Mfbԙ\ FlQ]/VRq<tkT~ 6 PS:*zIDU6:YQVL_{`f)*1L l3sI,Y-jh$P̀ 'Q]RyߎXKrꊉqIop c/D=cP߬ @.lšZ5SV1ubz. #'9s=g%MB n()E~:B1  a WHθh}odRبa s^F㏋ΪhMWS*[JITE +YҠ䑄S ^Uɒ5;d*xZ||9A7m'*-=|e"(" ]6vɖ7dZ,`FIO( 3(6G"mQCޕc7Pm{QJMM``]G\E)=~3dkRJGch0Up#TRm6mZ'u1F't)4~'!= ËzEޘU8x|V> 'e*tEE!vwK+,޶,04g%묺πG@"oTw@LP.Z'ڈp!})>=$V-7,AZw;?HKD241hۯ=p#vCPFߴRœp=W?ޔ`]??|bN V}FHUGwvސ*jtAF^v>XXYIL| jsv 1٨+(>[^Aρ$7 gNBeCʬaꢚ WQ)&Ԧ~@eyHc[^N]B]V E@o֌00-iCd6 ̴w(#E0<ߐs_x8$n>wsO܉}%3}wWNꡛ*6ئNػ)ɰr(|!Yfz{L<؀ow½*l\Ϝo)yNua'.unF5p}d+((ӄ=xS,~~ĺ}OCn> `LwdnH |{>X8Y:cSX ot'~,Z`$h暠old{SaBrFoUrD{1,|:|-h3Q#(/z{~Œ6)q$9HwwV>28 KPx7ԞQk${ycrqFW̨.5aHE"˖`;,Lp'/:b<ŵыwؿ7btHKM1lx"96bzNkޜNJٱ$ecn69Lfu u.l$}}w\ }nơlƾW<ǘwsJdx|G)Ro uTA܄iAN"="u-j]#-.uOY}h@x̗wB?v"yNʵ4F^RZ-Ej·~"6eKݸ&›& IO݁]6f,^?̖-毶J2Rd> P``sa ƛP'?36`\833ԙ+d|]fd/-sIQ@A,d;(9]WRϽ>Q=z, nu~x>^7C;d!k@bS= _M>[! 3#/=e6r_ ^etR-1$KıN> ?tQQ76+z:it܆Řj3ɭV\Hg7chZ:삚Tz~#L5 p,#7:hM2\ 6Aȷ44by //8#SXϷփ%5_l PczޛL@Mp8 ׂYzzrHt&$m[-Kڔ\ǎ wj{j>–nP' eT`K ZA`NrhR%cWܟ Dp{u_*~}1Ƿ(ԡ0g,Yn@1v{yŨﱢ>0$&rb>*v+>gT|LJ'KţyO{iw| W B+@&Eh8h=0Ʒ\˄Z$0@g뼢;Y-O@ZhIsBU|E@bNRDRR IRY:nf'VXJ4vL^=>=  8(5xKt?~>zEl, q&!)8R1$XSy=ClWp`w!l3 CwKlAn12fUtpoEhJiNc37yw;XqlxTőfϽ+z,?6-hy8IV|/s(_WE4N`v!hvfv2Mf`' {/b4*ќ8-ZNo 0IXgkq M0Qz 5om)땵R%z| )Thw]*q WTgј6=ܖq1l$%`@+KRVui< }:sm>=P"ق}R:ُݲr!{eu^tL@?~ZvT# 7]`欗^Zg#+T_SV1G/J$cq2a̵]680loДY{K3&h W+1"hsI)7O,lU0ը)V?KΛQcCŋ Zg /f<x!ɔ<*2#2Wz{332F5vHk^԰ƳBj6~2a 8{ %*EM@ *!wg Ϛ5LfjT/VvEFiGɀ[KRj|pT!(Vɧa0cd)|~cL6.=xq7JlJv9>c;UQdJPa O_ERG#M*ar<~eм A/I Խ8=#YzMM=:qzHAnw7`;'єG+p?Jg(- hZ}EH zGDP?&چcL<MUrEah LDWrR1x%z 5 KczW$خk8RNXWN6].Xw.emh ;_b]ܑfg2=TVzU M\RW{>c uˀōsvv/l8H[!txG@* k!Ș,% 0SqҘ;(Ǝ'e;VQkDw/|m$#F%S:M:IՅh;f3 cCOPNx/Ց}*%cwm_e/0. a%(Crl4+ yR~wpg]vI-MHsO^ /ta3imb LP^O3 +hf!Ǭ4k[f|| Wv8@EN'!Cmix:FG6u9H&E(@A-S8Ze<>@mM^w KFf"w_`,j!Z$FzjL4Z+f`28̱]82&1C^1(V1.>CR{ce8]|2[ic:J@"ܛ'0u]?SiҨ;[0 Sß a,*w2>P7)cVyZgYl;\-D_78>J=0I#cj=D-Ȝn3hBǫ{Oz9orWw9g&%hIͲ36Y^Zυݬ84usSh\ s6ҳ$ 4׷ $1RE]2t91q`6{P#7/ڷI%`Ϧ8l?KMx0|U-'"֊@abcL7`cwӁմ[dsrpnҥ͸qZ5=b̢" M.O*BnSVC&T)+%Atp"ۜ`n\n 9o 'lMj %쨪pD1, s%|ًR)9rB ob7<:th_FϺ(XQzÔcڰ7ϩAm+o Hj\[m3xjhx1FwgלB0z{$ґ|dHȇJxuٷCu2TX邏+exp Je%z}rP`gQp(|>`,#bc8ȯZLIZ;=)fGtv*?d(q$pD$Prtbr^Wդ%h^2ԓIMh2MwB4kqa4ZoJk'xi&Ca۶nglh< /<_77De(fֶ䘔-wxS J͸ecUՒ*bmj1ˡ6UKjS3e= CqBuqb,CfXo<,qM5I,3 \= {umshu 1ܢFP1˸,8O5;2~epw݈p)DdnMz!`9O рly ޢx^GtAa˅:S5jkc4,"k[SRD3 '3?Z69B?nhO( J|%;;08q}&FloR+y1c3LJx{~A})(x hgݔ6Os&{97ɥCi QpB09w8SG,wAhPmgR2qɿ{6-Y[5ΑbFNR]Y{}4ͳoE[0"@݊S5ձ2K"mjCyoVV1;8M2eRR?U) ,TS"]GH^~{CAfPm,z5r|x6 Z]WUI f sVApkev4K)+ |nTbqLLGHPa~_je rM0?aǭj;RΩebnE@$(#Qzs3 V*n%`wZ`, wBd`m{)ͣ"WnMx) Mne@45W낳ף [uށB#^Wy8? XnYhx_l5ގ}lITۛnMˡH)`J;(D{+=oEƅQZ ۜ.ג=¬Ӑ9dZT))7-֠uҩ1v2j,A4 9[=q'> BV"}A`+v૧CE+BԏH/ϼ<>+#\#z .j',e.T٩V+5ttbKƗk䜖&I<5Ȟk}F?F3.Qh[ɠpCyHJ^%XZ_)C;q4Ɔ \:>O*] ;gcygDCU- k O19) ggM:ů+G.NM 0"ZܦHjE5OE_DtnLP QOXoSQfَa#d\1Ȁ UYx usr/bin/text2image0 ݣjҿMh[=9Zs O1ïDGQ&tests/030.phpt000064400000000513152347044110007105 0ustar00--TEST-- RarArchive::getEntry() basic test --SKIPIF-- --FILE-- getEntry('tese.txt'); echo $rar_entry; echo "\n"; echo "Done\n"; --EXPECTF-- RarEntry for file "tese.txt" (23b93a7a) Done tests/multi.part2.rar000064400000011610152347044110010575 0ustar00Rar!zs =t#.2(E s;3 file2.txt19?~%V3|_cn#z;Yk/udo RGiq/13 R/| Ͱ0)u =L8~wogGWcp]7foץ/$SurAe. ;iˏ$/E"+໼:ΧT'N^xݽ\ۊXc_׀-+9qWLާ)'ټ[':޶5+A}O[tG pcWZU6^=J{Ԯ)qL)Nk $輧M~h x;66;BLѰAc \L 7|+6p-y~bPẌ2Wޜ`Su2 _ ayVҪl};/Zi.w.R1a.כ;EM^{v}}Zb7̊P<| wzjZSSk;٠n2;_?g1uT ۍOw1sj405hrG`[8ШU=0Ӧr'Z)` r}:.|y-mN]ojt|x,I&J!p Úɏ_l[ћLpyn =(>gd‹->>/dMt== 0EwXRp֏w' Vp%<F Yg/w'__lpo@`̋$Y_ep>zJB*>ocp4(@랖躈,Dt]x_\>]tbG{Us,))ct|@fQF^x-P'6GpSĈ'2P!8i Y ~ ^{0F8e_$}mȡʔwotoe3@?{g}} S˄ӧ*GQ%a. V'm,4G9;$S`}fnAHڽ5ʀ%sD&C.9:/-ɮ6}yOvDxWu]1-<\P'Tv^$0_X&`=ɧk^KOYӐÂ9qJC!߭ip6y:"7*:&;=|Q,u#:CoXlJ)BuIbTDMyx~hj]8)U;Ŝ_XWr5nӮY_Qu&vᵁ>S5?2 AvtRќ~&9ɀw$$ O=x g*vO~Ho1^u|Fa/Pq"guicz'9i>oHk_ "#d#eV4a"F$:w9Swr;4ΑJ 0yfpO`8'03?{+\E 0`UЊF r]JIՅby>{xz6VEf^({~o&y&].CESP%ϲe! x:Ё` OSC?Iڥ@#?ų܅2CD1/ e"KaiO%Rvڏ`<]V}\=KS`] )vV{)>_ h6a_^SK/,RՍ(SW&[EҽO&~.T⎍V$Z,{m&- lmpJAI$#'B-t>˧Wgo`"//4 ×UCp <8Ӹua=iT9<~K?R.ȍ۞S>Qb!KZ<ƷHc;RWXm5Bz] kӞiHy<bk mz*2;0'h w?\cil\IyPG@ps\CʯP 1HO+J/iNԾƑ mg*k}h=ؙ-茄;^-(|IjolI;SHYзC)y`-&WĤxwU~uFܾY~t&#<Êc?#9&{ZgySo>݄ gØoBr.}Liԛ2ʧQ.bΠdÍY~D~j8j](Z.X7)߉s>4!LO> ݨwmt}*31,]g]E4qV%l|!ѺQZ!SZхc։(FX m0̸M6*$ 4Dcōysʵ @%hD BT`ztu$nTsۯyg%}3zʝEb5SV#KG%|Csl5'El-1ɠv_X0p%Ee ?#p?7Lݽz&g,c kxHb>&/Uvqj^vq?z-Tl2 oRջ׶'ܐaBIWv(5Tz)]u %e9_쀻n<|I}*/Ki=# EP7]>_hd|wgUK=wkB&jg4>6\f*$A,oBd?6`({l0~Y՛x3As{Y)PP.d6'yVJQ'Q~/Zl͟_v;Ex?f6pEdJ_L1@^;^;Q Ry5)Qyg{t w=U7>*,Hc5aHVz1 ~MMm/)d__~?$ʗ(=.ݿ U$"}_U;G0bdM3t`z9,aQ"b#om? Oi/iItÑA΃C!PEq0J2/8T~RKN8w~ڽ#'pBX&}KJ)RTu֏%Eϫs-M4ZKd+&]kRNHϼsy581a™\o[ߝ * sZU[)(jů/5F*tta,RZKl[>3fN[EǷ&˦絇uLvʟ7lPI0vVкeoVi[y\zBa_aObWGbݛWZ 0RnE2zY@RZ{`f.xr晲 PpnC/59Z^JRJ1.ޑKڷo q|+imts\V a]P\F@2{`P?كco%?][w6a@?jALKލmpufŒvBFBf:9ZByN#r,LVK6-}/>tI Ǎ2/ ܲ Zv$]޽͌TP9$'JwGHkFaaESi49%fMNOZQ~Z ڪ\coZ ](DZ-#:0i7d 9"[]lP|Be6JPM>$M[tpUyxl>yߞ ݘ ܃>=yGW%qʘ'/n~Yy1/v0U}LdF]ktb3ZuueAχ@0kJΰGQGy;46qmd {YmCwCX~sƵ{g~؊<.#{6\l{6N.Mom DUUE-|P%7u27o776tp4dB);Z+ YH1s. O16pS_է-ۉ܋>bGF7YSA2lܡd}ܒ\Ӹ"q?zmD\YtDQX P:ݸ# ^ tgo4VbPCS6f3 Bhǩ{|i(anuB~cKQgO.E(Y얅X(1j0Ϊt}uu1T/qs1\)90tJ^;/*Iŷ7IAnS/!k>ؗ9VEl C1 ~JS`]I1JaD~I)JCcOTG_c~kz. TӒ|y]ƧV#({ G '/еY&:־e=pn`f{< \.\BSԫsgR ? $P}?3L9W@|*'uD;jʒy禼&H l.gI\Y]#±գ뻚4bGHL}]Gg"w6ҶKrQDCH2 {~7Ʌ@hooIc/ xx.zyRa*]JQT x.'?bvMG+ J1L[ĎA±s,#{|M)kv$=t~ً[sUm$O=xw. %}u| 7ogڂ:UpXϾ[}xtӞՇ<a^tI$u,"%daS1^E?|'TdŬzӻ_Cj*Y\ؤvU_ޫLHw I,SO/k e D3s(\xs> T$G;$q?%^^.o96G'6ڿ l| 3{1L֜s.4OMso؊Rq\&0'_Wu(y=~ hmVGQCKL^yћo^~FS\kIlV6|0&wO֋Gж3str9(d͑Ž }B ciMK'OBx$9&w\ceyuz=)(U/..t0X Mwߕ~3N|<#4dvnu`K0iaʱz}Z}k 6⽘R翢$KqZo4hw!OH K\i1R ~_<[[6߭I/r) J\P^lĖm}= ոr9XTFױ`>K 9cx-厬Z=_vw2:~StTyJ2=Y>}ZUؙ3Ih)s=8$ir}n/Q[g[fSQ^AC!͋@c:N⧈Joپ} XQ[b#HE竲 DDꡘk#d+ UjI ҿwhq_@`M=pxcz]Ypu>U Tl̆JJ!Bf?X~!پd 3yqYkuwVݽNgsMVEڃ}wG4YPʱYJ  þt+ t*uos֧J#יV#b~teqS6v i«cN wq_`mϚJ"?fą9Rϧ2F}m ֣7p Rpo~fz:dlSl=M: r'^3\1 r_r^ݾ1r*|[\\Y2`{J۲yMeHꞾE u|WxC^Ԛ{l=5`/B; O|8jLF o81wW >r[lY4]*ٷۍ}8-&Qʚ ¯"b U1݄I \bh(M~1Ů<ӱu'zStn5Յ$cx:=HIv'fכo&_g5%qΎlC2ԓ<1j{o^C;y wK W& /gZF8wZf{cpRT=my.s3M[5_ }[s{-?CԸbzTP;g!AnL=rM01=7G4Yh|ـDX<`_dt{ʂPf>̘MᇏYMd)gWn4~jB]s #s= -9{m?>PPKgjHVa#Ѹ .ЇLpԼd7F̯Lj\5~ʠ!әzL Aag-!WQn9[}h yr @S'qHZK!8sp֥IxtALQ<'K>ϷtuɉM3 XH1aT~o$= N=O@4@y+hO,jޟd`Ncwo=%p)\JO^V1Xv֓}OS9ҵSEF;&f.DW 2[pV ֺ!{_Ăb;ĎXPyK<އ4ޥBx@ m\6 TZwN$NV^yz7 :i`)D⁘Pa_(Vd􊇎 Sy_p)>܉ͻ8 7%lsN_w{@!2QMtests/115.phpt000064400000000644152347044110007116 0ustar00--TEST-- getIterator() (PHP 8+) --SKIPIF-- --FILE-- getIterator(); var_dump($it); foreach ($it as $e) { echo $e->getName(), "\n"; } echo "Done\n"; ?> --EXPECT-- object(InternalIterator)#3 (0) { } plain.txt test file with whitespaces.txt Done tests/4mb.rar000064400000004723152347044110007105 0ustar00Rar!ϐs t, @ <1 4mb.txt| Q _fO;I]$- OR,Z+W}{}Sٗ>`=toSOϮȟCow~|z"| ~|Oπ~|> zx3o~|OπCdO?>'cKqo'πO~| Oπ?> ''/?>'N`:|v?>?>?qo+| |Oπ~| Oπ?> ';oO~| Oπ?> '?>'b:|@x~|Oπ~| Oπ?> 6_"G?>'~|Oπ~| jd.F>~|Oπ~| Oπ?> '?>ϰOh_={@tests/097.phpt000064400000001364152347044110007127 0ustar00--TEST-- PECL bug #18449 (Extraction of uncompressed and encrypted files fails) --SKIPIF-- --CLEAN-- extract(dirname(__FILE__)); } @unlink(dirname(__FILE__) . '/base.css'); @unlink(dirname(__FILE__) . '/reset.css'); rar_close($rar); } echo "\nDone.\n"; --EXPECTF-- secret-crypted-none.rar secret-none.rar Done.tests/023.phpt000064400000000707152347044110007114 0ustar00--TEST-- RarEntry::getStream() with directory --SKIPIF-- --FILE-- getStream(); var_dump($stream); var_dump(feof($stream)); var_dump(fread($stream, 200)); var_dump(feof($stream)); echo "Done\n"; --EXPECTF-- resource(%d) of type (stream) bool(false) string(0) "" bool(true) Done tests/050.phpt000064400000000442152347044110007110 0ustar00--TEST-- Stream wrapper basic test --SKIPIF-- --FILE-- close(); echo $a."\n"; $a->close(); echo $a."\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- RAR Archive "%slatest_winrar.rar" RAR Archive "%slatest_winrar.rar" (closed) Warning: RarArchive::close(): The archive is already closed in %s on line %d RAR Archive "%slatest_winrar.rar" (closed) Done. tests/garbage.part03.rar000064400000001604152347044110011116 0ustar00Rar!zs tt!0,a#۔k<3 garbage.txt.y^tޥ.QpO6baQ̀6IN\?ls#dm BTJ8'(QK{J!3~tݛUd |'"3"_t%"Lɫ(ͅFYDqV"7EJ&z(Ċ~]it*-&vG: Kj*pQOY|qZHrĒ^;vD~+WVQ$EQ@P Cd* D3Dl-v1tI1=/@|Bap*)J5ۨ(ߺ9=^ו+nSS6MNvT[w#^" Ok j^n֒G:Ӻ3J6_ژ|@JU#s^0P[uooʨ/ʶ;v2UDjoXU1bpE)I7^a5Zn,Q$ΌƱ_~E*}47]||ACjJ߾E.;J["p4$>R7;*~9i Ѻϗ%i.W T~蓯Ĝ1*pg7o_³(w{ 3+^[iL kDct~@_}f0-d3OC"#ȓOyPh"PMz"PUr@DkMgT-]VhDÇ̖[2-b i˯``5UV%l`Hh{@c8tests/078.phpt000064400000002741152347044110007126 0ustar00--TEST-- Traversal of volume with only an archive continue from last volume --SKIPIF-- --FILE-- getEntry("garbage.txt")); echo "\nUsage of directory stream:\n"; $it = new DirectoryIterator("rar://" . rawurlencode($f)); foreach ($it as $e) { die("should not get here"); } echo "Success.\n"; echo "\nUsage of static url stat:\n"; stat("rar://" . rawurlencode($f) . "#not_there"); echo "Success.\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- Traversal with rar_list: array(0) { } Traversal with rar_list (again with the same object): array(0) { } Traversal with foreach: Success. Usage of RarArchive::getEntry: Warning: RarArchive::getEntry(): cannot find file "garbage.txt" in Rar archive "%sgarbage.part03.rar" in %s on line %d bool(false) Usage of directory stream: Success. Usage of static url stat: Warning: stat(): Found no entry not_there in archive %sgarbage.part03.rar in %s on line %d Warning: stat(): stat failed for rar://%sgarbage.part03.rar#not_there in %s on line %d Success. Done. tests/010.phpt000064400000001023152347044110007100 0ustar00--TEST-- RarEntry::getStream() function (good RAR file, one volume) --SKIPIF-- --FILE-- getStream(); echo $e->getName().":\n"; while (!feof($stream)) { echo fread($stream, 8192); } echo "\n\n"; } echo "Done\n"; ?> --EXPECTF-- 2 files: 1.txt: 11111 2.txt: 22222 Done tests/077.phpt000064400000001772152347044110007130 0ustar00--TEST-- RarArchive::open NULL can be given to indicate there's no password --SKIPIF-- --FILE-- T2"vFL+;``fҨē"ƃ+,Y/3_m"8˛Žא@{+@;}tHi3B|+ņ]dY%b֠JَOyd\}mԊ^0[)4+#t4?O#_;Q$:Õ}B:Ǘr Ttu–v=90HdbלJ6kªZ&qHPYgQI{!C{o\,eb 0yZ`EX>5}ػAt" %&$ -6SlZA7PzZi`S$ߚN/a8^InE8oO70u A5)6TE`OpPh xX(٪~OሇEO4"4â3{F p!> :ڐ'$0gVIle#<պb&p&W]l0ʍa-gxhR쪺8c=& e?:']ltiNi HI٦pHS GR ?/ؽ)bӓ ʅZY}Bz(GuKce8Y`mRBȠ Ѯ\y )ɱF3c)e֞h;D`Bt2CmiQֱ a{clԯ|ĕ2a'C4E֫0STrAa1"< pRSj=ƉO#-"ٖ]čxO^o6a[ly*2֧@&OCtar;~ΕVo؇ U[/YHSC3nN^zUX3 txXDA{Snl&CNn2G w"gd a^o.Z6^njpcgNʱa,s5jxYFo2d /}X&l5ejb߁k~`gSWÖf׸fBz0'a_/50UR};d{-,b~t9K K?R42ڟ8F;Pi¢aǮb?xɄDR!/'у=$!\~gsE^0ׯ_̦HD -C$S;Y3 0PGn](6FN2/#cvĔlsW2ȳ<_=$yZV2XxY*3F 0/QDR^Gtb^-,jvEng/Ksk4t"*98ݔdwbQԖϖEna`s}[5ƘG!_3%E|^[A k5lt$60$um=0 reset.css񾝭ȼE,Eg !aF8(FEe1TorN0 c;_ZNY8EH\X1zW _HY%Shx3I8CE]M}4rQ DأII 8>T2"vF%8Ō2aeJq2X~h6$[j;m(B9+#@1Ί̓# %G.-w'?]-3K=N*Z,pQc鮍x މ$ LpT#ϣe/g팿=m⥯ce׸A7S;q}2%?{@SDL9Ђk>" J2eil/8NZ?P; 䊥ޞ]R6TAϔa 4 Qɋ撺Frodz LxT\]@.!ە dIlk~5M@}iuXF΂J9X.\ ޭ0sk t*&B-Fxtn1Ȳ72-M}Fί|-FRw0NfdZ~t,;Pk !J kwR_XN|oQ;v\/dO~=3z3'6N˟ĬMbkTe?7oEg *{#\kA$h(q&qSðJ/Po< 8|caUD3^SNψdpV|xHP0}XfR~@E_ةg]٣֏ 9CʮzMs4\ĵV=/ŌB"dR^RT"N;gd#X,&B'JiK:q>K5a U^5CzшJ ^ \kls'eb$#Ə_\wWQG={@tests/028.phpt000064400000000416152347044110007116 0ustar00--TEST-- RarArchive::open() basic test --SKIPIF-- --FILE-- \ 1Ȁ UYɃ usr/bin/text2image0 ݣjҿMh[=9Zs O1ïD}I W\ﶩO4 Ewӵ VZcO2%[Q,߻p07uRud ˗f/ГJP&YošGj*M|.SZ4< R`ӨQC3DX}Eׁ֫ær`MS `ed/K-WWuJ/@_򐘥xf3bN*8F"iVrӭM ߱EF5@h$G`#{TG(S&_[KsnE_2YA3kp)t'ѷA/̛Q=;8)&jS8 mG9lk47vfF2SSh BJ4?ʐg'0 .(:/E3xLJ]﹍egKO$1UW_&4!Zm(֫0֪He}\[f1g#7ӂ@uR%Lmb|ŊEMhVS`&{"fe@icW[:raC+q~ XQ P?w_0>n1ܠD0gt~.%! Qr*6l!6тWX[#qLě2HT&zlwEm#Y)rf|tBBGn^P 41 ^)oQ? w/zBVJa_g 4&%LEyEi7Ss#"}>UC)oqPbV<g rk+IѠO1\𝹰t i>2uuACwhҽZA^a ۴Mp0~\Kǡnm1O3q1 ~ڲPMQ}t~Ӣ!.l* 7VA+ ,Q a sswEs˟vn  ,-9+:t jF1%SP/^펖 %O3$ 7 ÅZ08i0Tj!&[.ȌlnMZyg9t{F좍8Tw~d7949tr-qTt0kv >_6D\\SJbwۏ\dm[.b%-l`D)C۸J*I;vrӍwN0ZseːYdͬIdpj*a҄XUIc;.e! -:|VZWѼuTJ!Ƶcs[&=0Th+b0bя8:ڛ# E-*\9:5 muAMo'F(cQqdT"g9ouL]|系ʁrh"*0A t&i!.}H 7q ܷh+vܝ0G^\¿5ok:+eKz˼ih)Rw_.x+J慿vK/~k sn&V*^M-#}\N948].Bw}a  'aá Sآvض2Vva繃#}7h3bYdExl-wM@\5&d³xCe)wgwL_{8CpI}HaL"83hO`Ok#"Xe0ޢSapڹ&huBTm"nEVרigLY2eE=NJ, 7t? zf:TIr`Ba5/  `5[jRC67h>sbY<ĪF}ٝ*)> -FA`I>V}6?okweaO(+QUO+uݭMu򣧝Hd\ccnQhȃۥoir"(\J\K?-+8D.k:1^r]ze'3ɛ7=?ͽ;şR:Xl;N)#ЁYZwt-D) 6 ϘP\/ϫ.(eg\ǨnhU[X&DH"nS}b0.W๕VK<n p]1eB5Go4X~t1mkވ5NJ1$kȴ>lKq(|1`:Olр\47yZm󣂰NS bmr,$̝_/yə+EN3~@5t\6)jJrsyc k-ŹLJw Hv֖\! _,ȗBLkSw6SJ^@>BVYPw#3Q,d#Jc_s ;IQXCkiySKD񉗒_H%\&JLyف* @luzEZ/$b65^qdESosuQ{C:8.):j$rc8CoH:x;qpҞ."?h5ׅN=R0{11E[2ě6,28l4'De6F?az9Pc]҅S5$#p/cȴ\ž1`` S6T&, ỂS`uN K@/|h˙H@5DoO}(=6L6\^?:p\pjUZ`:R k7ZPKR! tU#UۧC9ªTy|>&+i y9]BOll|EĀkS%^fA<2x'MG=84Zt%gvj%Awu7.1H ^zҨ@GwǛzOc%>3@oL n},T#_hyH7,yyRm?1&S Q}}C"&}SY p*uTVd}a@mBrymtUNqntՕ($Nh(Q$:+k+Y&GJ/6/~vKhMkɨ |hO*>8c.<_`RP%@|6a Dq{EQ >5$S.(ʿ4e>7|*g6LLb|9qۮAAzjL}kqeGER/WRɍkƁ)"Wt 6 yԳ_\J4PU~G?ԁvPs)0ʊ$MP_'rU{w>=Єv0ܓ߸'@p@JupǣSCMSd œK΄xݔj,ѬèԳ?%E;^$oRA Lgaz ]ѝfwa+_lyg;]9 0CʴPOT%$gYGԽ{n5>u_՞k_u5`]]:I_D!{_̘!=K$ViO;oԝ "N'4ln2E|{^HH{>hf!(Fle8ٽz9D)(4a$vR(ZHUlGv:"]-H43n? RI XS*`O6]'oPYR*tL0¯%5S4 +&D daj31}U)8 "s`Y Ӄdvg(`$.Z(KHnÅ`-Oxa7 3܇U黁sRXeZKT`ͯE 8΅9_WieP4lƛΛv`ayػ8j#qS݆kXnnO>G4?(ij9ՊowlgT#㑌+)ىn/wbZL E"&_EJP:/S ;yb){ ;a`% }/o}!K/ߝp.*Cg`!~g׽,-)aͻ2ccp=8`H*H)Ki\(!3bhAߡp" \M&U</U!H#DZp1ɴ/Z൭H)n%"]aKafpdMe~&D A5Uxiޖ8@/8f N~7\JF~Ϭ4I".!9}C1#w'ēfY'w+/W!^Eڀ`W*vR4\4\w!l.ZK/bCҋO#=ANpu!m/oE*;-#i;Nփ"By,'up1.rط@ QO\ke0aw>\ 1Ȁ UYɃ usr/bin/text2image0 ݣjҿMh[=9Zs O1ïDwVQtests/encrypted_headers.rar000064400000000434152347044110012106 0ustar00Rar!Ιs ^v~t@XuOd]qE;m>W.|'rXrp<6[τ1"H.an#Q5[bFË+jNG3u݋;}L쀈0O͝fI.~^v~x9!#5&7jw?rHEN=6[@x.؀HIUzΊ꾹[bFË+jNG3u݋;}L쀈0O͝fI.~^v~BM%)\4(tests/106.phpt000064400000000523152347044110007112 0ustar00--TEST-- Stat times don't depend on timezone (cf. 056.phpt) --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getFileTime()); echo "Done.\n"; --EXPECTF-- string(19) "2010-05-30 01:22:00" Done. tests/php8compat.php.inc000064400000001067152347044110011257 0ustar00getMessage(); $msg = "Warning: $msg in {$err->getFile()} on line {$err->getLine()}"; $msg = preg_replace('/: Argument #(\d) \(\$\S+\) must be of type/', ' expects parameter \1 to be', $msg); $msg = preg_replace('/expects (.+) (\d) argument/', 'expects \1 \2 parameter', $msg); echo "\n", $msg, "\n"; } } tests/007.phpt000064400000000524152347044110007113 0ustar00--TEST-- rar_open() function with a non-RAR --SKIPIF-- --FILE-- --EXPECTF-- Warning: rar_open(): Failed to open %s: ERAR_BAD_ARCHIVE in %s on line %d bool(false) Done tests/064.phpt000064400000002111152347044110007110 0ustar00--TEST-- RAR directory-aware traversal with directory streams --SKIPIF-- = 70000) die("skip for PHP 5.x"); if (key_exists('USE_ZEND_ALLOC', $_ENV) && PHP_VERSION_ID < 70000) die('skip do not use with valgrind in PHP <7'); --FILE-- --FILE-- getName(); var_dump($name); echo "\n"; echo "Done\n"; ?> --EXPECTF-- string(13) "file1À۞.txt" Done tests/076.phpt000064400000003016152347044110007120 0ustar00--TEST-- RarEntry::extract NULL can be given to indicate there's no password --SKIPIF-- --CLEAN-- extract('', $dest); var_dump($result); echo "\n* NULL given (should have the same effect as no password):\n"; $result = $e->extract('', $dest, NULL); var_dump($result); echo "\n* empty string given as password (should have the same ". "effect as no password):\n"; $result = $e->extract('', $dest, ''); var_dump($result); echo "\n* password given; a wrong one:\n"; $result = $e->extract('', $dest, 'wrongpassword'); var_dump($result); break; } echo "\n"; echo "Done.\n"; --EXPECTF-- * No password given: Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * NULL given (should have the same effect as no password): Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * empty string given as password (should have the same effect as no password): Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * password given; a wrong one: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d bool(false) Done. tests/098.phpt000064400000001457152347044110007133 0ustar00--TEST-- PECL bug #18449 (Extraction of uncompressed and encrypted files fails; stream variant) --SKIPIF-- --CLEAN-- getStream()))); } echo "\nDone.\n"; --EXPECTF-- Warning: stream_get_contents(): The file size is supposed to be 2279 bytes, but we read more: 2288 bytes (corruption/wrong pwd) in %s on line %d int(2288) Warning: stream_get_contents(): The file size is supposed to be 1316 bytes, but we read more: 1328 bytes (corruption/wrong pwd) in %s on line %d int(1328) Done. tests/082.phpt000064400000001377152347044110007125 0ustar00--TEST-- RarArchive read_property handler basic test --SKIPIF-- --FILE-- --FILE-- getEntry('empty_file'); if ($rar_file === false) die("could not find entry"); $stream = $rar_file->getStream(); if ($stream === false) die("could not open stream"); var_dump(feof($stream), fread($stream, 1024*1024), feof($stream)); echo "\n"; echo "Done.\n"; ?> --EXPECT-- bool(false) string(0) "" bool(true) Done. tests/096.phpt000064400000001350152347044110007121 0ustar00--TEST-- Module info test --SKIPIF-- --FILE-- enabled RAR EXT version => %d.%d.%s UnRAR version => %d.%d%spatch%d %d-%d-%d UnRAR API version => %d extension %d Done. tests/014.phpt000064400000000760152347044110007113 0ustar00--TEST-- RarEntry::getStream() on unicode entry --SKIPIF-- --FILE-- getStream(); if ($stream !== false) while (!feof($stream)) { echo fread($stream, 8192); } echo "\n"; echo "Done\n"; ?> --EXPECTF-- RarEntry for file "file1À۞.txt" (52b28202) contents of file 1 Done tests/038.phpt000064400000000622152347044110007116 0ustar00--TEST-- RarArchive get iterator on closed file --SKIPIF-- --FILE-- close(); foreach ($rarF as $k => $rarE) { echo "$k. $rarE\n"; unset($rarE); } echo "Done.\n"; --EXPECTF-- Fatal error: main(): The archive is already closed, cannot give an iterator in %s on line %d tests/043.phpt000064400000002100152347044110007103 0ustar00--TEST-- rar_open() with volume find (callback variants 1) --SKIPIF-- getEntries(); $rar = RarArchive::open($fn, null, array("A", "resolveStatic")); $rar->getEntries(); $rar = RarArchive::open($fn, null, array(new A(), "resolveInstance")); $rar->getEntries(); function testA() { global $fn; $obj = new A(); return RarArchive::open($fn, null, array($obj, "resolveInstance")); } $rar = testA(); $rar->getEntries(); echo "Done.\n"; --EXPECTF-- A::resolveStatic() A::resolveStatic() A::resolveInstance() A::resolveInstance() Done. tests/103.phpt000064400000000620152347044110007105 0ustar00--TEST-- RarEntry direct instantiation does not crash (PHP 7) --SKIPIF-- = 7"); --FILE-- --FILE-- isSolid()?'yes':'no') ."\n"; echo "$arch2: " . (rar_solid_is($arch2)?'yes':'no') . "\n"; $arch2->close(); var_dump(rar_solid_is($arch2)); echo "\n"; echo "Done.\n"; --EXPECTF-- RAR Archive "%sstore_method.rar": no RAR Archive "%ssolid.rar": yes Warning: rar_solid_is(): The archive is already closed in %s on line %d bool(false) Done. tests/020.phpt000064400000001462152347044110007110 0ustar00--TEST-- RarEntry::getStream() function (solid archive) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 2 files: tese.txt: 787 bytes, CRC 23B93A7A unrardll.txt: 19192 bytes, CRC 2ED64B6E Done tests/057.phpt000064400000000521152347044110007115 0ustar00--TEST-- RAR file stream stat consistency with url stat --SKIPIF-- --FILE-- --FILE-- getCrc()."\n"; echo $list[1]->getCrc()."\n"; echo $list[2]->getCrc()."\n"; echo "\n"; echo "Done\n"; ?> --EXPECTF-- 52b28202 f2c79881 bcbce32e Done tests/040.phpt000064400000001261152347044110007107 0ustar00--TEST-- RarEntry::getUnpackedSize() on platforms with 32-bit longs --SKIPIF-- getEntries(); reset($t)->extract(false, $fn2); $rarF2 = RarArchive::open($fn2); $t = $rarF2->getEntries(); var_dump($t[0]->getUnpackedSize()); var_dump($t[1]->getUnpackedSize()); echo "Done.\n"; --CLEAN-- --FILE-- isBroken("jjj"); }); argerr(function() use ($a) { rar_broken_is($a, "jjj"); }); echo "\n* unbroken file; as first call\n"; var_dump($a->isBroken()); echo "\n* unbroken file; as second call\n"; $a = RarArchive::open($f); $a->getEntries(); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken\n"; $a = RarArchive::open($b); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken; kill warning\n"; function retnull() { return null; } $a = RarArchive::open($b, null, 'retnull'); var_dump($a->isBroken()); echo "\n* broken file; as first call; don't allow broken; kill warning; non OOP\n"; $a = RarArchive::open($b, null, 'retnull'); var_dump(rar_broken_is($a)); echo "\n* broken file; as second call; don't allow broken\n"; $a = RarArchive::open($b); $a->getEntries(); var_dump($a->isBroken()); echo "\n"; echo "Done.\n"; --EXPECTF-- * unbroken file; bad arguments Warning: RarArchive::isBroken() expects exactly 0 parameters, 1 given in %s on line %d Warning: rar_broken_is() expects exactly 1 parameter, 2 given in %s on line %d * unbroken file; as first call bool(false) * unbroken file; as second call bool(false) * broken file; as first call; don't allow broken Warning: RarArchive::isBroken(): Volume %smulti_broken.part2.rar was not found in %s on line %d bool(true) * broken file; as first call; don't allow broken; kill warning bool(true) * broken file; as first call; don't allow broken; kill warning; non OOP bool(true) * broken file; as second call; don't allow broken Warning: RarArchive::getEntries(): Volume %smulti_broken.part2.rar was not found in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d bool(true) Done. tests/047.phpt000064400000002175152347044110007123 0ustar00--TEST-- RarEntry::extract() function (broken set fixed with volume callback) --SKIPIF-- --FILE-- getEntry('file2.txt'); echo "\nSuccess:\n"; $rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve'); $entry = $rar_file1->getEntry('file2.txt'); $entry->extract(null, dirname(__FILE__) . "/temp_file2.txt"); echo int32_to_hex(crc32(file_get_contents(dirname(__FILE__) . "/temp_file2.txt"))); echo "\n"; echo "Done\n"; ?> --CLEAN-- getEntries(); echo "Done.\n"; --EXPECTF-- Warning: RarArchive::getEntries(): Cound not expand filename aaaa%s in %s on line %d Warning: RarArchive::getEntries(): ERAR_EOPEN (file open error) in %s on line %d Done. tests/008.phpt000064400000001611152347044110007112 0ustar00--TEST-- rar_entry_get() function --SKIPIF-- --FILE-- --EXPECTF-- RarEntry for file "file1.txt" (52b28202) Warning: rar_entry_get(): cannot find file "nonexistent_file.txt" in Rar archive "%s" in %s on line %d bool(false) Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_entry_get() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done tests/108.phpt000064400000000405152347044110007113 0ustar00--TEST-- RarEntry::getPackedSize() --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getPackedSize()); echo "Done.\n"; --EXPECTF-- int(2444) Done. tests/114.phpt000064400000003501152347044110007110 0ustar00--TEST-- Bug 76592: solid files are partially extracted --SKIPIF-- setAllowBroken(true); // we don't fixup the headers checksum, only the contents. Ignore the error $entry = $rar->getEntry('test.dat') or die('Unable to get entry'); $contents = stream_get_contents($entry->getStream(), $entry->getUnpackedSize()); $crc32_rar = $entry->getCrc(); $crc32_cont = dechex(crc32($contents)); $crc32_orig_content = dechex(crc32($contents)); unlink($file); echo 'orig content size: ', strlen($middle), "\n"; echo 'read content size: ', strlen($contents), "\n"; if ($crc32_rar !== $crc32_cont) { die("CRC values do not match"); } if ($crc32_rar !== $crc32_orig_content) { die("CRC values do not match (2)"); } ?> ==DONE== --EXPECT-- orig content size: 10485760 read content size: 10485760 ==DONE== tests/088.phpt000064400000000705152347044110007125 0ustar00--TEST-- RarArchive write_property gives a fatal error --SKIPIF-- --FILE-- getEntries(); $rar = RarArchive::open($fn, null, $f); $rar->getEntries(); $f2 = function ($vol) { echo "Closure (2)\n"; return A::resolve($vol); }; $rar = RarArchive::open($fn, null, $f2); unset($f2); $rar->getEntries(); echo "Done.\n"; --EXPECTF-- A::__invoke() Closure Closure (2) Done. tests/004.phpt000064400000004060152347044110007107 0ustar00--TEST-- RarEntry::extract() method --SKIPIF-- --FILE-- extract(dirname(__FILE__)); $contents11 = file_get_contents(dirname(__FILE__).'/test file with whitespaces.txt'); echo $contents11."\n"; @unlink(dirname(__FILE__).'/test file with whitespaces.txt'); $entry1->extract(false,dirname(__FILE__).'/1.txt'); $contents12 = file_get_contents(dirname(__FILE__).'/1.txt'); echo $contents12."\n"; @unlink(dirname(__FILE__).'/1.txt'); $rar_file2 = rar_open(dirname(__FILE__).'/latest_winrar.rar'); $entry2 = rar_entry_get($rar_file2, '2.txt'); $entry2->extract(dirname(__FILE__)); $contents21 = file_get_contents(dirname(__FILE__).'/2.txt'); echo $contents21."\n"; @unlink(dirname(__FILE__).'/2.txt'); $entry2->extract(false,dirname(__FILE__).'/some.txt'); $contents22 = file_get_contents(dirname(__FILE__).'/some.txt'); echo $contents22."\n"; @unlink(dirname(__FILE__).'/some.txt'); $entry2->extract(dirname(__FILE__)); var_dump(file_get_contents(dirname(__FILE__).'/2.txt')); @unlink(dirname(__FILE__).'/2.txt'); $oldcwd = getcwd(); chdir(dirname(__FILE__)); var_dump($entry2); var_dump($entry2->extract("","")); @unlink('2.txt'); chdir($oldcwd); echo "Done\n"; ?> --EXPECTF-- blah-blah-blah blah-blah-blah 22222 22222 string(5) "22222" object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate%s=> int(0) ["redir_to_directory%sprivate%s=> NULL ["redir_target%sprivate%s=> NULL } bool(true) Done tests/086.phpt000064400000000706152347044110007124 0ustar00--TEST-- RarArchive write_property gives a fatal error --SKIPIF-- --FILE-- w~ڽ#'pBX&}KJ)RTu֏%Eϫs-M4ZKd+&]kRNHϼsy581a™\o[ߝ * sZU[)(jů/5F*tta,RZKl[>3fN[EǷ&˦絇uLvʟ7lPI0vVкeoVi[y\zBa_aObWGbݛWZ 0RnE2zY@RZ{`f.xr晲 PpnC/59Z^JRJ1.ޑKڷo q|+imts\V a]P\F@2{`P?كco%?][w6a@?jALKލmpufŒvBFBf:9ZByN#r,LVK6-}/>tI Ǎ2/ ܲ Zv$]޽͌TP9$'JwGHkFaaESi49%fMNOZQ~Z ڪ\coZ ](DZ-#:0i7d 9"[]lP|Be6JPM>$M[tpUyxl>yߞ ݘ ܃>=yGW%qʘ'/n~Yy1/v0U}LdF]ktb3ZuueAχ@0kJΰGQGy;46qmd {YmCwCX~sƵ{g~؊<.#{6\l{6N.Mom DUUE-|P%7u27o776tp4dB);Z+ YH1s. O16pS_է-ۉ܋>bGF7YSA2lܡd}ܒ\Ӹ"q?zmD\YtDQX P:ݸ# ^ tgo4VbPCS6f3 Bhǩ{|i(anuB~cKQgO.E(Y얅X(1j0Ϊt}uu1T/qs1\)90tJ^;/*Iŷ7IAnS/!k>ؗ9VEl C1 ~JS`]I1JaD~I)JCcOTG_c~kz. TӒ|y]ƧV#({ G '/еY&:־e=pn`f{< \.\BSԫsgR ? $P}?3L9W@|*'uD;jʒy禼&H l.gI\Y]#±գ뻚4bGHL}]Gg"w6ҶKrQDCH2 {~7Ʌ@hooIc/ xx.zyRa*]JQT x.'?bvMG+ J1L[ĎA±s,#{|M)kv$=t~ً[sUm$O=xw. %}u| 7ogڂ:UpXϾ[}xtӞՇ<a^tI$u,"%daS1^E?|'TdŬzӻ_Cj*Y\ؤvU_ޫLHw I,SO/k e D3s(\xs> T$G;$q?%^^.o96G'6ڿ l| 3{1L֜s.4OMso؊Rq\&0'_Wu(y=~ hmVGQCKL^yћo^~FS\kIlV6|0&wO֋Gж3str9(d͑Ž }B ciMK'OBx$9&w\ceyuz=)(U/..t0X Mwߕ~3N|<#4dvnu`K0iaʱz}Z}k 6⽘R翢$KqZo4hw!OH K\i1R ~_<[[6߭I/r) J\P^lĖm}= ոr9XTFױ`>K 9cx-厬Z=_vw2:~StTyJ2=Y>}ZUؙ3Ih)s=8$ir}n/Q[g[fSQ^AC!͋@c:N⧈Joپ} XQ[b#HE竲 DDꡘk#d+ UjI ҿwhq_@`M=pxcz]Ypu>U Tl̆JJ!Bf?X~!پd 3yqYkuwVݽNgsMVEڃ}wG4YPʱYJ  þt+ t*uos֧J#יV#b~teqS6v i«cN wq_`mϚJ"?fą9Rϧ2F}m ֣7p Rpo~fz:dlSl=M: r'^3\1 r_r^ݾ1r*|[\\Y2`{J۲yMeHꞾE u|WxC^Ԛ{l=5`/B; O|8jLF o81wW >r[lY4]*ٷۍ}8-&Qʚ ¯"b U1݄I \bh(M~1Ů<ӱu'zStn5Յ$cx:=HIv'fכo&_g5%qΎlC2ԓ<1j{o^C;y wK W& /gZF8wZf{cpRT=my.s3M[5_ }[s{-?CԸbzTP;g!AnL=rM01=7G4Yh|ـDX<`_dt{ʂPf>̘MᇏYMd)gWn4~jB]s #s= -9{m?>PPKgjHVa#Ѹ .ЇLpԼd7F̯Lj\5~ʠ!әzL Aag-!WQn9[}h yr @S'qHZK!8sp֥IxtALQ<'K>ϷtuɉM3 XH1aT~o$= N=O@4@y+hO,jޟd`Ncwo=%p)\JO^V1Xv֓}OS9ҵSEF;&f.DW 2[pV ֺ!{_Ăb;ĎXPyK<އ4ޥBx@ m\6 TZwN$NV^yz7 :i`)D⁘Pa_(Vd􊇎 Sy_p)>܉ͻ8 7%lsN_w{@!2QMtests/035.phpt000064400000001026152347044110007112 0ustar00--TEST-- rar_entry_get() non-existent file with exceptions --SKIPIF-- --FILE-- getEntry('nonexistentfile.txt'); } catch (RarException $re) { echo "Message: " . $re->getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- Message: cannot find file "nonexistentfile.txt" in Rar archive "%slatest_winrar.rar" Code: -1 Done. tests/034.phpt000064400000000677152347044110007124 0ustar00--TEST-- RarException::(set/is)UsingExceptions() test --SKIPIF-- --FILE-- --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); try { var_dump($entries[0]->getStream()); } catch (RarException $re) { echo "Message: " . $re->getMessage()."\n"; echo "Code: " . $re->getCode() ."\n"; } echo "Done.\n"; --EXPECTF-- --> should fail (no password): int(2) Message: unRAR internal error: ERAR_MISSING_PASSWORD (password needed but not specified) Code: 22 Done. tests/017.phpt000064400000000711152347044110007112 0ustar00--TEST-- RarEntry::extract() with unicode files --SKIPIF-- --FILE-- extract(false, dirname(__FILE__).'/temp.txt'); echo file_get_contents(dirname(__FILE__).'/temp.txt'); echo "\n"; @unlink(dirname(__FILE__).'/temp.txt'); echo "Done\n"; ?> --EXPECTF-- contents of file 1 Done tests/085.phpt000064400000000577152347044110007131 0ustar00--TEST-- RarArchive has_property handler is given a closed archive --SKIPIF-- --FILE-- close(); var_dump(isset($a[0])); echo "\n"; echo "Done.\n"; --EXPECTF-- Warning: main(): The archive is already closed in %s on line %d bool(false) Done. tests/rar5-links.rar000064400000000424152347044110010404 0ustar00Rar! n](BrYr@file1-hardlink.txtcontents of file b5BrY@ file1.txtfile1-hardlink.txtH %OCrY@dir-linkdir)1 BrY@file1-link.txt  file1.txtl:;JCrYdirwVQtests/041.phpt000064400000001261152347044110007110 0ustar00--TEST-- RarEntry::getUnpackedSize() on platforms with 64-bit longs --SKIPIF-- getEntries(); reset($t)->extract(false, $fn2); $rarF2 = RarArchive::open($fn2); $t = $rarF2->getEntries(); var_dump($t[0]->getUnpackedSize()); var_dump($t[1]->getUnpackedSize()); echo "Done.\n"; --CLEAN-- --FILE-- getComment(); echo "\n"; echo "Done\n"; --EXPECTF-- This is the comment of the file commented.rar. Done tests/104.phpt000064400000001057152347044110007113 0ustar00--TEST-- Clone of RarArchive is forbidden (PHP 7) --SKIPIF-- = 7"); --FILE-- getEntries(); echo "Never reached.\n"; ?> --EXPECTF-- Fatal error: Uncaught Error: Trying to clone an uncloneable object of class RarArchive in %s:5 Stack trace: #0 {main} thrown in %s on line %d tests/solid.rar000064400000011704152347044110007532 0ustar00Rar!;s t-z:# u- $jBkn1z.̪x: #}?u 5gwsL< f=3|KvTS/g`&' tBjzhX3XSb.Mk̤EA)!? 9z>n ~ror[!+G#mjpi ׁaHY.!1PP} 0"vqgN7T,59 k`\jgh W(#]^lΛ$c o;I^d*AN OG}6;ϗ4qoarU?DW޷g(μ`^0Z=˻ct0ѹgdu!!G oMS"[u3qyBI0xwS3v^a`;bj )=n ӟ>HǚN0ˈ `8m%ϞOa-A2PC\7y7IOѝE^ׁ}B`A$MxB0p1|& YXc#`:-_'+'vInu4lcjNJJHotonr+ CR->Sn̷w[lIG#8UۚLyo((uENnJlaW5љ Un;*6MOG]qc]~,"]_}>1y&gHE;!ʄ9$VɶW5DKt%;mE@$ˍb ~n9D#6'兾! 1 ^I('^ #W-41⁕tr[}ŨeȪņ,f5Gmc%۹ rb)MXFrt2^Q\H`ؑz.Y,)8rK9--K e6N3ݔ;𿨌Q s8kD\5EQ $NJ`[y(/FH-«x6 n;*ݚ"BOS}}]l.p"Jz\~3.OPw0mJC*Hr#$F*^t|,Dayš0Cg[i`>D$9PbP䓘ĻQkD]S~,̒ .e+/A ?r*A(obxD^P_v6`N@|Cv^·u3] 7命嘗%mZ+oaNA:c!쓕Wh:T -=ۘIpnB+&Z^3HE9~ UIhz;8^㳜-_1W3=0:1dBwEr0(>z1`(gљd=8e"(L0 -p;Z׈+DF5(ZUUY@|h6 ߖ5j6@ZJgy@)TXs]Duxx֗+KEK<]_e=^7RpgQ_ORh+*٪]*w:}tЇKb\ _%E7UJ/rX sjOs;oqٗKE:oH)'ێDӪOoJDZ$$ͪ qʆT/KE3e*4_yE` 㱡[m;58 G03&fovG~ OlVeْA#PA^7(aWH @kD =$@f-<lc˭Lk6 OmY)LU}}elڧ:vO*og٘o?fd9iIҟHiQ.Y~`MW.M) 6fufViU3] t7p;FnK&zz6ʽ(nRzdzאvC~ҪE$$C:%.\Wb*:JZ!*GTm"\V:UqxZBQE-)# %$p,M7DQG 7H/>0\GG>%Lfa[!+9w ){_ES Uɖ `E`V zGɪ@sĩ{,Y0 Y.;*3G|"vKtW7 &q|ବpuKiuSHLc;{|IM)R!!:8p7[fx1S )g& °]Job tV[Ԑy%u^?mdL>9~.X 60!n1 ~$ C|HwwD Aj+CFo&\7,<Xvi;@l?^N 5]Q\~W۾(d4P@H;1ItB|qZ剣q|>nYa rtjjѤ! !oB;u;+Hq:u|]w܆fP1o; mEElmLK9x,rqֳd@h$bKu}k\Hk~@ksSw 3&k'" /y+W#|*|'b,̏u2|2/[4Y+o}MNZŻ'~~|Ls@tci_Ii*Q{p:`|W~~g_eeU$n_C( \ԉ%n:Y G q4Eu# wb\x #*?#N̼@&(I ӖDv6ҰI|2ff[o!k|yjDC?} j5rE@gM!jo|u ;lD7tSp2F城]X@)yW4j)2d 菮fQ>Z' axo8Z+P"}ڌ2dʴrrZUd=ZiRT4XN%PM~>^ ' AB<|h'W}̪b:dfAW忠Hΐm%;Ҧ E,ʑ])<1-ЭW )3{1lx2"G` *)锤gV];$=&Q|%k 1xq)7i=-(] ']0ш7])teb9<4J*EP)kNl߀j]Y_{FmQ_=;ec*W_Jow,K(p0.G5pW+"MN)*6B<܈^HLb@L;eMԻbŤ(jO&>ؿ%x=qHo~5S(#yEؗg2 jX-c]BBM *f:$AUEPO~~ s55䨺Ww%'9aI{Me\m!zWKpP8sn0jQ#4({ʣ)תB=H$t+Rh/QC \ FgJ3Fsot}AK\{;#=y7,p&׍&$^G4Q\dwh&-K44)Op"DAyt|rYUr?#)>LdΊtc[lb|T(a|`n T -Y3C! :岜@ pvX\k[7*,iEƓݑ<4f&7(lB ܫQ4C.˗*:lӬ0 2-UGY0tmp\'L"s~ D\"Sm={@tests/013.phpt000064400000000655152347044110007115 0ustar00--TEST-- rar_entry_get() and RarEntry::getName() coherence --SKIPIF-- --FILE-- getName(); $entryback = rar_entry_get($rar_file1, $name); echo "$entryback\n"; echo "\n"; echo "Done\n"; ?> --EXPECTF-- RarEntry for file "file1À۞.txt" (52b28202) Done tests/046.phpt000064400000001673152347044110007124 0ustar00--TEST-- RarEntry::getStream() function (broken set fixed with volume callback) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (is_resource($stream) && !feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- file1.txt: 18 bytes, CRC 52B28202 file2.txt: 17704 bytes, CRC F2C79881 file3.txt: 18 bytes, CRC BCBCE32E Done tests/corrupted.rar000064400000006542152347044110010433 0ustar00Rar!Aps ét-IRE5ځX<55 test\C:5B'T;Z$'+֓IPЗNZ+y) {) e"*w@{$6Ȥf`& ќ~gԹt,(WX<55 test\Sbv=ÐyVpP;MAp^AN6#gԧ~t5!&X<55test\WeT47hkFsw~g`t(X<50Atest\a\a6-t(aY<50Atest\awTt0X<50Atest\a.a.a.a\aBt.X<50 Atest\a.a.a\aʥt,X<50 Atest\a.a\at.J~X<55test\dcyxypbj:Dgvt2<ӁX<55test\g|j{][\};V;[d%Lgԏt1!o.pX<55test\g cnn݇t .B}:(\gt5 J~X<55test\a.a.a.a\a.a\lwtvHY(7gԭt);6!LX<55 test\a\oeAVbPyC_RX ښ7\)7~7:Kdhg[t*!f|AgZt? J~X<55test\a.a\a.a.a.a\y.llywbylsxam.<%gt+c5rX<55 test\ =.*0`PdCBgmt(gY<50Atest\a.a t0Y<50Atest\a.a.a.a\a.at.2Y<50Atest\a.a.a\a.at,X<50 Atest\a.a\a.a[t,Y<50 Atest\a\a.at*X<50 Atest\a.a.at4X<50Atest\a.a.a.a\a.a.a at0X<50Atest\a.a.a\a.a.at0YY<50Atest\a.a\a.a.at.X<50 Atest\a\a.a.a7t4X<50Atest\a.a.a.a\a.a.a.aUjt.X<50 Atest\a.a.a.at4X<50Atest\a.a.a\a.a.a.at0Y<50Atest\a.a\a.a.a.ait0X<50Atest\a\a.a.a.at0< X<55test\ctkmgt.cmwf%&E AhԢ$f 8ш:l"VQ汉E\9_J5!͠xgDt7'tX<55test\.btareckw.jnxkmpig,mo[=KKčXA;hd-g?Zt)"艁X<55 test\.kaqޡ[&`SP*~WyOgt2j3ہX<55test\a\qijt.lfcrpg4ANWg`gZt< bOX<55test\a.a\j.ngmccgooauqn.cl.m;-:g,t1&5X<55test\mn.x.lt.nfvdP }nIOXbMƺld^gzRt0#QX<55test\.a.cfmsku.pyO{ISoGJ{Fg$t<zB2X<55test\a.a\a.a.a\oyo:nwnlh.uhywQϠgt-R2X<55 test\.xvtxhrfN'$gt4 X<55test\a.a.a\a.a\qv.ybgt&gY<50Atest={@tests/019.phpt000064400000001416152347044110007117 0ustar00--TEST-- RarEntry::getStream() function (store method) --SKIPIF-- --FILE-- getStream(); echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 512); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 1 files: tese.txt: 787 bytes, CRC 23B93A7A Done tests/026.phpt000064400000003421152347044110007113 0ustar00--TEST-- RarEntry::getStream() (file level password) --SKIPIF-- --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); var_dump($entries[0]->getStream()); echo "\n"; echo "--> success (password is the same as the one given on rar_open):\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar', 'samplepassword'); $entries = rar_list($rar_file2); echo stream_get_contents($entries[0]->getStream()); echo "\n\n"; echo "--> should give incorrect data (password of 2nd file different from the one given on rar_open):\n"; echo rawurlencode(stream_get_contents($entries[1]->getStream())); echo "\n\n"; echo "--> should give correct data (password of 2nd file is specified):\n"; echo stream_get_contents($entries[1]->getStream('samplepassword2')); echo "\n\n"; echo "--> success (password is the same as the one given on rar_open, which shouldn't have been forgotten):\n"; echo stream_get_contents($entries[0]->getStream()); echo "\n\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): int(2) Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) --> success (password is the same as the one given on rar_open): Encrypted file 1 contents. --> should give incorrect data (password of 2nd file different from the one given on rar_open): t%09%A6%2B%0D%1B%F6%815%5E%E7%EC%C0%0BF%5EH%3A%C0%0D%815%5E%E7%EC%C0 --> should give correct data (password of 2nd file is specified): Encrypted file 1 contents. --> success (password is the same as the one given on rar_open, which shouldn't have been forgotten): Encrypted file 1 contents. Done tests/107.phpt000064400000002362152347044110007116 0ustar00--TEST-- Redirection functions --SKIPIF-- 'FSREDIR_UNIXSYMLINK', RarEntry::FSREDIR_WINSYMLINK => 'FSREDIR_WINSYMLINK', RarEntry::FSREDIR_JUNCTION => 'FSREDIR_JUNCTION', RarEntry::FSREDIR_HARDLINK => 'FSREDIR_HARDLINK', RarEntry::FSREDIR_FILECOPY => 'FSREDIR_FILECOPY', ); $a = rar_open(dirname(__FILE__) . '/rar5-links.rar'); $i = 0; foreach ($a as $e) { if ($i++ != 0) echo "\n"; echo "$i. ", $e->getName(), "\n"; $type = $e->getRedirType(); $type = $type ? $m[$type] : $type; echo "redir type: ", var_export($type, true), "\n"; echo "redir to dir: ", var_export($e->isRedirectToDirectory(), true), "\n"; echo "redir target: ", var_export($e->getRedirTarget(), true), "\n"; // break; } echo "Done.\n"; --EXPECTF-- 1. file1-hardlink.txt redir type: NULL redir to dir: NULL redir target: NULL 2. file1.txt redir type: 'FSREDIR_HARDLINK' redir to dir: false redir target: 'file1-hardlink.txt' 3. dir-link redir type: 'FSREDIR_UNIXSYMLINK' redir to dir: true redir target: 'dir' 4. file1-link.txt redir type: 'FSREDIR_UNIXSYMLINK' redir to dir: false redir target: 'file1.txt' 5. dir redir type: NULL redir to dir: NULL redir target: NULL Done. tests/022.phpt000064400000001430152347044110007105 0ustar00--TEST-- RarEntry::extract() with directory --SKIPIF-- --FILE-- extract(dirname(__FILE__)); var_dump($extrres); $exists = is_dir($dir); var_dump($exists); @rmdir($dir); echo "\n\n"; $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . "emptydircust"; $exists = is_dir($dir); var_dump($exists); $extrres = $e->extract(false, $dir); var_dump($extrres); $exists = is_dir($dir); var_dump($exists); @rmdir($dir); echo "Done\n"; --EXPECTF-- bool(false) bool(true) bool(true) bool(false) bool(true) bool(true) Done tests/store_method.rar000064400000001533152347044110011113 0ustar00Rar!ϐs ?t -z:#getEntry('file1.txt'); var_dump($e->getVersion()); echo "Done.\n"; --EXPECTF-- int(50) Done. tests/encrypted_only_files.rar000064400000000355152347044110012640 0ustar00Rar!ϐs ]t$902~;3 encfile1.txtl tOM1 --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_headers.rar'); $entries = rar_list($rar_file1); echo "\n--> should fail (wrong password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_headers.rar', 'wrongpassword'); $entries = rar_list($rar_file1); echo "\n--> should work:\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_headers.rar', 'samplepassword'); $entries = rar_list($rar_file2); echo "Found " . count($entries) . " files.\n"; echo "Content of first one follows:\n"; //reset($entries)->extract(false, "./temp.txt"); $stream = reset($entries)->getStream(); var_dump($stream); if ($stream !== FALSE) { while (!feof($stream)) { echo fread($stream, 128); } } echo "\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): Warning: rar_list(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d --> should fail (wrong password): Warning: rar_list(): ERAR_BAD_DATA in %s on line %d --> should work: Found 2 files. Content of first one follows: resource(%d) of type (stream) Encrypted file 1 contents. Done tests/dirs_and_extra_headers.rar000064400000010007152347044110013074 0ustar00Rar!os@ 7t O<0 ?\%2Fempty%2E\file7.txtp0| DMPvzbrz;3STM:stream2.txt> 4MPvzbrՑz#f|3ACL U ͹ i@Y(0 QyyaAXL8 HC0Q,i˃owvO=w hDxyOsmg/bb CX وP„J8tE<0?\%2Fempty%2Ep0 +<ڊ< `z#"3ACL T= =l (Z&jooloFI6:AJ4F`F02h_xjx}&Z`Z]9m׏bET*JqOwȊ'JyPAt?y<0 ?\emptyp0Xy !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2t?y<0 ?\?_2G0\0 :y<jy< :bz#}gS3ACL Q> !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2t8<0?@0pF y< !iBbN0D!()(PQ$9"пիw7>A2-^" RvY+l/߯bEfZ}ܐ4B a3~yEW2gtDy<0allow_everyone_ni8y<8y<8zz#Vh{݂3ACL PϹkdpR4c9*`uX#s{{>-;iE}+'Cnsz ;֣b8돺 z6  `0RRProtect+g?]q6BY Yf/je)o6_J(v.2a癕 y¾+)1ZRaM^UՍ`(,h Y1 PBtnGGikHBI0le1txtyE(]u, 8X?n5͑."_mE<r6PhRӶJAM;Quli;2J%ۋr ʓ%1ưd@ƤltV:d ?ddY&2)JYtNj+ XNLFM""|&u +__+qҚyF Ob y!y<[E’`P fVc݂&qƧˉDd;A(n֗P7aՅa Ku)wbmW84ZZD |BLqjf{EH7^J\,ʝȥ`ڤaY`܊=fO}>QիR+HqP KKCtudw(7$-&xzI\ fe= Y. 1 r"v&q[S͡I-ߊ DxD/yOsƙng3gӗ :ց rN"t+ ǝ 忈An_bKr㾗?Q2=m}zӦ#ASl>ӳN̔[wL V=p2wAA0V͹Z3e<Y%t4M:m+Coe;a:`B]9n,"ZkjӥJL?ש#[RcmӤF{Y5œD`| 4+4py%,F铏4!h[{ýaXͧ(TD*= +X{|:5n MDC^ЛAavu % sY#|"33ACLL@qp4MxDAQ;g={@tests/002.phpt000064400000007017152347044110007112 0ustar00--TEST-- rar_list() function --SKIPIF-- --FILE-- --EXPECTF-- array(2) { [0]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(9) "plain.txt" ["unpacked_size%sprivate%s=> int(15) ["packed_size%sprivate%s=> int(25) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:24" ["crc%sprivate%s=> string(8) "7728b6fe" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } [1]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(30) "test file with whitespaces.txt" ["unpacked_size%sprivate%s=> int(14) ["packed_size%sprivate%s=> int(20) ["host_os%sprivate%s=> int(3) ["file_time%sprivate%s=> string(19) "2004-06-11 11:01:32" ["crc%sprivate%s=> string(8) "21890dd9" ["attr%sprivate%s=> int(33188) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(51) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } } array(2) { [0]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(0) ["name%sprivate%s=> string(5) "1.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(17) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:18" ["crc%sprivate%s=> string(8) "a0de71c0" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(0) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } [1]=> object(RarEntry)#%d (%d) { ["rarfile%sprivate%s=> object(RarArchive)#%d (%d) { } ["position%sprivate%s=> int(1) ["name%sprivate%s=> string(5) "2.txt" ["unpacked_size%sprivate%s=> int(5) ["packed_size%sprivate%s=> int(16) ["host_os%sprivate%s=> int(2) ["file_time%sprivate%s=> string(19) "2004-06-11 10:07:26" ["crc%sprivate%s=> string(8) "45a918de" ["attr%sprivate%s=> int(32) ["version%sprivate%s=> int(29) ["method%sprivate%s=> int(53) ["flags%sprivate%s=> int(16) ["redir_type%sprivate]=> int(0) ["redir_to_directory%sprivate]=> NULL ["redir_target%sprivate]=> NULL } } Warning: rar_open(): Failed to open %s: ERAR_EOPEN (file open error) in %s on line %d Warning: rar_list() expects parameter 1 to be RarArchive, boo%s given in %s on line %d Done tests/029.phpt000064400000001051152347044110007113 0ustar00--TEST-- RarArchive::getEntries() basic test --SKIPIF-- --FILE-- getEntries() as $e) { echo $e . "\n"; } echo "Done\n"; --EXPECTF-- RarEntry for file "emptydir%clink" (36ac99f1) RarEntry for file "file" (b95e8411) RarEntry for file "link" (43e55b49) RarEntry for directory "emptydir" (0) RarEntry for directory "nopermdir" (0) RarEntry for directory "setuiddir" (0) RarEntry for directory "stickydir" (0) Done tests/105.phpt000064400000000771152347044110007116 0ustar00--TEST-- Clone of RarArchive is forbidden (PHP 5.x) --SKIPIF-- = 70000) die("skip for PHP 5.x"); --FILE-- getEntries(); echo "Never reached.\n"; ?> --EXPECTF-- Fatal error: Trying to clone an uncloneable object of class RarArchive in %s on line %d tests/079.phpt000064400000002470152347044110007126 0ustar00--TEST-- RarArchive count elements handler test --SKIPIF-- --FILE-- close(); var_dump(count($a)); echo "\n* Closed file test (2):\n"; $a = RarArchive::open($f); $a->getEntries(); $a->close(); var_dump(count($a)); echo "\n* Closed file test (3, exceptions):\n"; $a = RarArchive::open($f); RarException::setUsingExceptions(true); $a->getEntries(); $a->close(); try { var_dump(count($a)); } catch (RarException $e) { echo "OK, threw exception with message \"".$e->getMessage()."\"\n"; } RarException::setUsingExceptions(false); echo "\n* Empty file:\n"; $a = RarArchive::open($fempty); echo "Count: " . count($a) . "\n"; echo "\n"; echo "Done.\n"; --EXPECTF-- * Normal test: Count: 13 * Closed file test (1): Warning: %s(): The archive is already closed in %s on line %d int(0) * Closed file test (2): Warning: %s(): The archive is already closed in %s on line %d int(0) * Closed file test (3, exceptions): OK, threw exception with message "The archive is already closed" * Empty file: Count: 0 Done. tests/095.phpt000064400000004520152347044110007122 0ustar00--TEST-- Wrapper cache exaustion test --SKIPIF-- --FILE-- getEntry('file1.txt'); var_dump($e->getMethod()); echo "Done.\n"; --EXPECTF-- int(48) Done. tests/directories.rar000064400000000324152347044110010730 0ustar00Rar!ϐs 8t = 3rKy;0 dirwithsth\fileindir.txtThis file is inside a directory.t/Ky;0 dirwithsth|rt-Ky;0emptydir/={@tests/059.phpt000064400000004714152347044110007127 0ustar00--TEST-- url stat test --SKIPIF-- 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 312768000 [ctime] => 0 [blksize] => %s [blocks] => %s ) RAR root is dir: bool(true) RAR root variant 2 matches: bool(true) RAR root variant 3 matches: bool(true) Regular file: Array ( [dev] => 0 [ino] => 0 [mode] => 33188 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 8 [atime] => 0 [mtime] => 1259625512 [ctime] => 0 [blksize] => %s [blocks] => %s ) Regular file: Array ( [dev] => 0 [ino] => 0 [mode] => 16877 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 1259625807 [ctime] => 0 [blksize] => %s [blocks] => %s ) Done. tests/027.phpt000064400000003354152347044110007121 0ustar00--TEST-- RarEntry::getStream() with Linux directories and links --SKIPIF-- --FILE-- getAttr() & 0x1FF) . "\n"; //no read/write/execute perms echo "win directory bit: " . (($e->getAttr() & RarEntry::ATTRIBUTE_WIN_DIRECTORY) != 0) ."\n"; echo "unix directory attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_DIRECTORY) ."\n"; echo "unix symlink attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_SYM_LINK) ."\n"; $stream = $e->getStream(); $cont = stream_get_contents($stream); echo "$cont (strlen() " . strlen($cont) . ")\n"; echo "\nLink\n"; $e = rar_entry_get($rar, "link"); echo $e."\n"; echo "perms: " . decoct($e->getAttr() & 0x1FF) . "\n"; echo "win directory bit: " . (($e->getAttr() & RarEntry::ATTRIBUTE_WIN_DIRECTORY) != 0) ."\n"; //coincidence echo "unix directory attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_DIRECTORY) ."\n"; echo "unix symlink attr: " . (($e->getAttr() & RarEntry::ATTRIBUTE_UNIX_FINAL_QUARTET) == RarEntry::ATTRIBUTE_UNIX_SYM_LINK) ."\n"; $stream = $e->getStream(); $cont = stream_get_contents($stream); echo "$cont (strlen() " . strlen($cont) . ")\n"; //varies on windows and linux echo "Done\n"; --EXPECTF-- Directory RarEntry for directory "nopermdir" (0) perms: 0 win directory bit: unix directory attr: 1 unix symlink attr: (strlen() 0) Link RarEntry for file "link" (43e55b49) perms: 777 win directory bit: 1 unix directory attr: unix symlink attr: 1 %s Done tests/055.phpt000064400000001424152347044110007116 0ustar00--TEST-- Stream wrapper with volume find callback --SKIPIF-- array('volume_callback'=>'resolve')))); $a = stream_get_contents($stream); echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() echo "Done.\n"; --EXPECTF-- 17704 bytes, CRC F2C79881 Done. tests/062.phpt000064400000002204152347044110007111 0ustar00--TEST-- RAR directory stream stat --SKIPIF-- 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 0 [mtime] => 312768000 [ctime] => 0 [blksize] => %s [blocks] => %s ) Sub-root directory: Array ( [dev] => 0 [ino] => 0 [mode] => 16895 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 0 [atime] => 1272938643 [mtime] => 1272938643 [ctime] => 1272813170 [blksize] => %s [blocks] => %s ) Done. tests/latest_winrar.rar000064400000001310152347044110011266 0ustar00Rar!sH t*qޠP05 1.txtsP1wsgt*EP05 2.txtD;t~Ngz6KK0RRProtect+.Rar!sH t*qޠP05 1.txtsP1wsgt*EP05 2.txtD;t~Ng={@tests/empty_file.rar000064400000000115152347044110010547 0ustar00Rar!ϐs ]t *l@3 empty_fileg={@tests/100.phpt000064400000001246152347044110007107 0ustar00--TEST-- fopen modes 'r' and 'rb' are the only allowed --SKIPIF-- --FILE-- --EXPECTF-- Testing 'r' opened Testing 'rb' opened Testing 'r+' Warning: fopen(%s): %cailed to open stream: Only the "r" and "rb" open modes are permitted, given r+ in %s on line %d Done. tests/061.phpt000064400000000652152347044110007115 0ustar00--TEST-- RAR directory stream attempt on file --SKIPIF-- --CLEAN-- extract("", $dest); if ($res) { echo $e->getPosition() . ". $e\n"; echo file_get_contents($dest); echo "\n"; } else { die("failed extraction"); } } echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) Content of first file. 1. RarEntry for file "file.txt" (771df243) Content of second file. Done. tests/069.phpt000064400000000731152347044110007123 0ustar00--TEST-- RarEntry direct instantiation does not crash (PHP 5.x) --SKIPIF-- = 70000) die("skip for PHP 5.x"); if (key_exists('USE_ZEND_ALLOC', $_ENV) && PHP_VERSION_ID < 70000) die('skip do not use with valgrind in PHP <7'); --FILE-- --FILE-- --FILE-- getStream(); var_dump($stream); echo "\n* NULL given (should have the same effect as no password):\n"; $stream = $e->getStream(NULL); var_dump($stream); echo "\n* empty string given as password (should have the same effect; " . "rar disallows empty passwords):\n"; $stream = $e->getStream(''); var_dump($stream); echo "\n* non-empty password given; should give stream:\n"; $stream = $e->getStream('bugabuga'); var_dump($stream); break; } echo "\n"; echo "Done.\n"; --EXPECTF-- * No password given: Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * NULL given (should have the same effect as no password): Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * empty string given as password (should have the same effect; rar disallows empty passwords): Warning: RarEntry::getStream(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) * non-empty password given; should give stream: resource(%d) of type (stream) Done. tests/073.phpt000064400000001043152347044110007113 0ustar00--TEST-- RarEntry::getStream handles files with non-unique entry names --SKIPIF-- --FILE-- getStream(); if ($stream) { echo $e->getPosition() . ". $e\n"; echo stream_get_contents($stream); echo "\n"; } } echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) Content of first file. 1. RarEntry for file "file.txt" (771df243) Content of second file. Done. tests/018.phpt000064400000001234152347044110007114 0ustar00--TEST-- rar_list()/rar_entry_get() with not first volume --SKIPIF-- --FILE-- --FILE-- getName()} is ". ($e->isDirectory()?"":"not ") . "a directory.\n"; } echo "Done\n"; --EXPECTF-- dirwithsth%cfileindir.txt is not a directory. dirwithsth is a directory. emptydir is a directory. Done tests/001.phpt000064400000001100152347044110007074 0ustar00--TEST-- rar_open() function --SKIPIF-- --FILE-- --EXPECTF-- object(RarArchive)#%d (%d) { } object(RarArchive)#%d (%d) { } Warning: rar_open(): Failed to open %sno_such_file.rar: ERAR_EOPEN (file open error) in %s on line %d bool(false) Done tests/005.phpt000064400000001425152347044110007112 0ustar00--TEST-- rar_comment_get() function --SKIPIF-- --FILE-- getComment()); echo "\n"; $rar_file2 = rar_open(dirname(__FILE__).'/linux_rar.rar'); var_export(rar_comment_get($rar_file2)); echo "\n"; rar_close($rar_file2); var_export(rar_comment_get($rar_file2)); echo "\n"; echo "Done\n"; ?> --EXPECTF-- 'This is the comment of the file commented.rar.' 'This is the comment of the file commented.rar.' 'This is the comment of the file commented.rar.' NULL Warning: rar_comment_get(): The archive is already closed in %s on line %d false Done tests/089.phpt000064400000000523152347044110007124 0ustar00--TEST-- RarArchive unset_property gives a fatal error --SKIPIF-- --FILE-- --FILE-- --FILE-- = 2) break; //$e->extract(false, dirname(__FILE__).'/temp.txt'); //echo "now stream\n"; $stream = $e->getStream(); echo $e->getName().": "; if ($stream === false) { echo "Could not get stream.\n\n"; continue; } while (!feof($stream) && $i != 2) { echo fread($stream, 8192); } fclose($stream); echo "\n"; } echo "Done\n"; ?> --EXPECTF-- 51 files (will test only the first 4): test%s: The great battle of Gunprex versus Optiter!!!!!1 Gunprex, Fire! So long, Optiter! test%s Done tests/056.phpt000064400000001214152347044110007114 0ustar00--TEST-- RAR file stream stat --SKIPIF-- 0 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 5 [atime] => 0 [mtime] => 1086948439 [ctime] => 0 [blksize] => %s [blocks] => %s ) Done. tests/066.phpt000064400000003201152347044110007113 0ustar00--TEST-- RarEntry::extract() (file level password) --SKIPIF-- --CLEAN-- @unlink(dirname(__FILE__).'/extract_temp'); --FILE-- should fail (no password):\n"; $rar_file1 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar'); $entries = rar_list($rar_file1); var_dump(count($entries)); var_dump($entries[0]->extract(false, $dest)); echo "\n"; echo "--> success (password is the same as the one given on rar_open):\n"; $rar_file2 = rar_open(dirname(__FILE__).'/encrypted_only_files.rar', 'samplepassword'); $entries = rar_list($rar_file2); var_dump($entries[0]->extract(false, $dest)); echo file_get_contents($dest); unlink($dest); echo "\n\n"; echo "--> should fail (password of 2nd file different from the one given on rar_open):\n"; var_dump($entries[1]->extract(false, $dest)); echo "\n\n"; echo "--> should give correct data (password of 2nd file is specified):\n"; var_dump($entries[1]->extract(false, $dest, 'samplepassword2')); echo file_get_contents($dest); unlink($dest); echo "\n\n"; echo "Done\n"; --EXPECTF-- --> should fail (no password): int(2) Warning: RarEntry::extract(): ERAR_MISSING_PASSWORD (password needed but not specified) in %s on line %d bool(false) --> success (password is the same as the one given on rar_open): bool(true) Encrypted file 1 contents. --> should fail (password of 2nd file different from the one given on rar_open): Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d bool(false) --> should give correct data (password of 2nd file is specified): bool(true) Encrypted file 1 contents. Done tests/113.phpt000064400000000630152347044110007107 0ustar00--TEST-- RarEntry::isEncrypted() --SKIPIF-- getEntry('file1.txt'); var_dump($e->isEncrypted()); $a = rar_open(dirname(__FILE__) . '/encrypted_only_files.rar'); $e = $a->getEntry('encfile1.txt'); var_dump($e->isEncrypted()); echo "Done.\n"; --EXPECTF-- bool(false) bool(true) Done. tests/072.phpt000064400000000662152347044110007120 0ustar00--TEST-- rar_list handles files with non-unique entry names --SKIPIF-- --FILE-- getPosition() . ". $e\n"; } echo "\n"; echo "Done.\n"; --EXPECTF-- 0. RarEntry for file "file.txt" (ae2a88a7) 1. RarEntry for file "file.txt" (771df243) Done. tests/sparsefiles_rar.rar000064400000013102152347044110011576 0ustar00Rar!ϐs Ɯt4ֈ;oHe<3 sparsefiles.rarux Y;Lb K&Thbh 40$%*"B1ZYB2\l^h B"6 % MSGym- [},_axV_Õs+}q4ewmu}_WkGxYy:Y\ks]p~n;|| +~{mha_n?/#4a0|z~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| 'g^ΦX󩻖'SNρOρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>!^~v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gwDóOρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>7}=O[Y0S[ˍCWKr~oy>'8 wN!\_>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>N:v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'SOu>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>Nρ;>N:v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'g>|a'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gwDMo|z~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~|<+'gv| 'gv| 'gv| 'gw7|~|~|~|v~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| ߴކ-2|3v| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| 'gv| |~|~|~|v~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| '~| 3~p;[gyNρ;>Nρ;>Nρ;>N?Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>Oρ?>OρkmΧі%}?g3WO/={@tests/015.phpt000064400000001273152347044110007114 0ustar00--TEST-- rar_close() liberates resource (PECL bug #9649) --SKIPIF-- --FILE-- extract("."); unlink(dirname(__FILE__).'/temp.rar'); echo "Done\n"; ?> --EXPECTF-- RAR Archive "%s" RarEntry for file "1.txt" (a0de71c0) RAR Archive "%s" (closed) Warning: RarEntry::extract(): The archive is already closed in %s on line %d Done tests/080.phpt000064400000004467152347044110007126 0ustar00--TEST-- File stream EOF behavior --SKIPIF-- --FILE-- getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 18)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); echo "\n* First fread is given size - 1:\n"; $stream = $a->getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 17)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); var_dump(fread($stream, 1)); echoeof($stream); echo "\n* First fread is given size + 1:\n"; $stream = $a->getEntry("file1.txt")->getStream(); echoeof($stream); var_dump(fread($stream, 19)); echoeof($stream); echo "\n* Read is aligned with dictionary, buffer and file size:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194304))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); echo "\n* Read is dictionary, buffer and file size - 1:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194303))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); var_dump(strlen(fread($stream, 1))); echoeof($stream); echo "\n* Read is dictionary, buffer and file size + 1:\n"; $stream = $a2->getEntry("4mb.txt")->getStream(); echoeof($stream); var_dump(strlen(fread($stream, 4194305))); echoeof($stream); echo "\n"; echo "Done.\n"; --EXPECTF-- * First fread is given file size: Not at eof string(18) "contents of file 1" Not at eof string(0) "" At eof * First fread is given size - 1: Not at eof string(17) "contents of file " Not at eof string(1) "1" Not at eof string(0) "" At eof * First fread is given size + 1: Not at eof string(18) "contents of file 1" At eof * Read is aligned with dictionary, buffer and file size: Not at eof int(4194304) Not at eof int(0) At eof * Read is dictionary, buffer and file size - 1: Not at eof int(4194303) Not at eof int(1) Not at eof int(0) At eof * Read is dictionary, buffer and file size + 1: Not at eof int(4194304) At eof Done. tests/090.phpt000064400000000747152347044110007124 0ustar00--TEST-- RarArchive has_property gives a fatal error --SKIPIF-- --FILE-- 2R8HXñ*q0`s>L:/x(vdH_\%+Noq*7ˊ.u G?;6Ljڒȧ?D%EV BO$.)ts1E{l-7$5Z&@IP".ۥ.o8zXcGwH4|*ϒ˗_[;7 [zTkrY}A%A3a^3VpAlWzhbј;bjvvsBW16$DT'@E\t_YFYJvUH:VuD7iةz27 I$/4j; އӃ zˊ}5֌XzUAŸMDAh=xr[U7`J?2X:-ՙ(M?(m+54{k[B>e5I4 ԟY̐v&5VfZ(+/Fňu8"[/ DR }bzx 1Mz:U[ae\=>6EGL6{~.q-8@=9j,*‡/2w' =L3eB ۹GSq@Bzj53Z31[F0; jT@xCClj^f8r껤P/p2F`sooxH@4DpZt޲ }&xåoYPKӮΧv1j^Z?J}C~ T Aj.uAfR{}bNBuФf;OV}%ֺG;~OoK::/ڸ' 'uVQcKyMn*E88*bX .5Z`Vm>ʒIAב bk+*FJ*<*ǝQ%l[t})QGA/Y&b\^h+ئTѰ}VyThZӷSMEt^Kƚ2DYlߣX0\b3dZB5=ȋ͘e]yPv^<?k,Jvw9#q>O@XE6¯>k虍\_#c;T><LQ v6P\WzryAY]cR6΄lz;L=%\xW_(vU;3lc !iTY%_2;Z=7C` 65n *Kay['e֦'xG6PaD6YT=8&;8r܊hkÁAaX/1c+x5L1q%<ԁd9nsN ue#|,QBX|lgҞSnsX Zr!NvC! MkjXG&P@' ΅u E+3U}~b4S&  QJTA}M]}Cyg-?f%` EpRz^-0{;h]Oh CK74:_aaj+t{=wH{ܳབ& vPSي[gaI>1_;FCs`M+Sd({‹,#G|`aEOI>`CYx[~ oB\b90Bgzpb@z`xO0v2Rs 0Ĉ^&ZZ/ADTztbScT:f:# s6Yڇ 6O y5<&_yy+S՛zyTXl{; ([ɳ,U%$4)@Spotuz)]fwN+?u|;[9;ݬjKRǤb]~4 M|r<}<>ʂQ_hP< ʊ t%ہઃ[G\e=pG_UZdj JAz߲_fz/^I-{mrc@w0_O2&HWz kߎ0~w5g*8/}ЯFV:l`ql1\JMyb6J,վȉI6tţN[ womKtQ ,k\{罻3M)ӭ"0 ntpq `'ܓJAK3P4FhqW-i4r;O;yY"bܯVBLP|\nU9MXvssny|ow-=V^N4סi6:O=lIƃ Yt~1n;OHG kڷcbH4m4 *a+`\m\>Εbqda]>,q? g<#}ce?* MInϿ&49 CদK<{/H)rs6{+_UE~{'~]Z\u')[$ Y¹.u/ˡE͵7cz>%S"#hyX. dv cW~ڢ@ǃ/I]pe@B煒~EƟѫ2"\g!bN"~$?j,'S1ج':Ӯ) _ypqhTl]:23E:UM*\nɄ'z(:vXVi)t {(pPs|\i=ِ#=XN$>XYk1ϩ}; . ۰1_N_Cui[Lx@EEA֦"2j1vARS --FILE-- getStream(); if ($stream === false) { die("Failed to get stream.\n"); break; } echo $e->getName().": "; $a = ""; while (!feof($stream)) { $a .= fread($stream, 8192); } echo strlen($a)." bytes, CRC "; echo int32_to_hex(crc32($a))."\n\n"; //you can confirm they're equal to those given by $e->getCrc() } echo "Done\n"; ?> --EXPECTF-- 3 files: file1.txt: 18 bytes, CRC 52B28202 file2.txt: 17704 bytes, CRC F2C79881 file3.txt: 18 bytes, CRC BCBCE32E Done tests/109.phpt000064400000000441152347044110007114 0ustar00--TEST-- RarEntry::getHostOs() --SKIPIF-- getEntry('4mb.txt'); var_dump($e->getHostOs()); var_dump(RarEntry::HOST_WIN32); echo "Done.\n"; --EXPECTF-- int(2) int(2) Done. tests/016.phpt000064400000001716152347044110007117 0ustar00--TEST-- RarEntry::extract() method (corrupt RAR file) --SKIPIF-- --FILE-- = 4) break; echo "Extraction of file #$i:\n"; $ret = $e->extract(false, dirname(__FILE__).'/temp.txt'); if ($ret) echo "\tSUCCESS\n"; else echo "\tFAILED\n"; echo "\n"; } @unlink(dirname(__FILE__).'/temp.txt'); echo "Done\n"; ?> --EXPECTF-- 51 files (will test only the first 4): Extraction of file #1: SUCCESS Extraction of file #2: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Extraction of file #3: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Extraction of file #4: Warning: RarEntry::extract(): ERAR_BAD_DATA in %s on line %d FAILED Done tests/032.phpt000064400000000642152347044110007112 0ustar00--TEST-- RarArchive traversal with multi-part archive --SKIPIF-- --FILE-- $rarE) { echo "$k. $rarE\n"; } echo "Done\n"; --EXPECTF-- 0. RarEntry for file "file1.txt" (52b28202) 1. RarEntry for file "file2.txt" (f2c79881) 2. RarEntry for file "file3.txt" (bcbce32e) Done tests/rar_unicode.rar000064400000000144152347044110010706 0ustar00Rar!ϐs t 7Rr;0 file1?.txtvcontents of file 1={@tests/052.phpt000064400000001332152347044110007111 0ustar00--TEST-- Stream wrapper archive/file not found --SKIPIF--