/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . gradle . kotlin . dsl . support Ċ Ċ import Ġorg . gradle . kotlin . dsl . fixtures . Test With Temp Files Ċ Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . junit . Assert . assertFalse Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ Ċ import Ġjava . io . File Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip OutputStream ĊĊ Ċ class ĠZip Test Ġ: ĠTest With Temp Files () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` unzip Ġfails Ġon Ġpath Ġtraversal Ġattempts `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġm alic ious Zip Ġ= Ġfile (" mal ic ious . zip "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip OutputStream ( output Stream ()). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ" sus pic ious ". toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . put Next Entry ( Zip Entry (" path / ../../ traversal . txt ". replace ('/', ĠFile . separator Char )). apply Ġ{ Ġsize Ġ= Ġcontent . size . to Long () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . write ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip . close Entry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunzip To ( file (" output / directory "), Ġm alic ious Zip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ex . message , ĠequalTo ("' path / ../../ traversal . txt ' Ġis Ġnot Ġa Ġsafe Ġzip Ġentry Ġname .". replace ('/', ĠFile . separator Char ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( file (" output "). exists ()) ĊĠĠĠ Ġ} Ċ } Ċ