From 5f1faec3e28cc02466bf68606bb2ef9328abb58c Mon Sep 17 00:00:00 2001 From: Fred Condo Date: Mon, 31 Oct 2011 10:16:03 -0700 Subject: [PATCH] BUGFIX: regex-escape strings to prevent regex syntax errors Apply preg_quote to each generator name and to $this->Name so that their use in a regular expression will not cause run-time errors. Provided fixture and test. --- model/Image.php | 6 +++--- tests/model/ImageTest.php | 9 +++++++++ tests/model/ImageTest.yml | 6 +++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/model/Image.php b/model/Image.php index 9740bdedd..aeb7b21ac 100644 --- a/model/Image.php +++ b/model/Image.php @@ -361,13 +361,13 @@ class Image extends File { foreach($methodNames as $methodName) { if(substr($methodName, 0, 8) == 'generate') { $format = substr($methodName, 8); - $generateFuncs[] = $format; + $generateFuncs[] = preg_quote($format); } } // All generate functions may appear any number of times in the image cache name. $generateFuncs = implode('|', $generateFuncs); - $pattern = "/^(({$generateFuncs})\d+\-)+{$this->Name}$/i"; - + $pattern = "/^(({$generateFuncs})\d+\-)+" . preg_quote($this->Name) . "$/i"; + foreach($cachedFiles as $cfile) { if(preg_match($pattern, $cfile)) { if(Director::fileExists($cacheDir . $cfile)) { diff --git a/tests/model/ImageTest.php b/tests/model/ImageTest.php index 951ff15cd..21c38f8bf 100644 --- a/tests/model/ImageTest.php +++ b/tests/model/ImageTest.php @@ -93,4 +93,13 @@ class ImageTest extends SapphireTest { $actual = $imageSecond->getHeight(); $this->assertEquals($expected, $actual); } + + function testGeneratedImageDeletion() { + $image = $this->objFromFixture('Image', 'imageWithMetacharacters'); + $image_generated = $image->SetWidth(200); + $p = $image_generated->getFullPath(); + $this->assertTrue(file_exists($p)); + $image->deleteFormattedImages(); + $this->assertFalse(file_exists($p)); + } } \ No newline at end of file diff --git a/tests/model/ImageTest.yml b/tests/model/ImageTest.yml index 36ea710cd..452cd298f 100644 --- a/tests/model/ImageTest.yml +++ b/tests/model/ImageTest.yml @@ -11,4 +11,8 @@ Image: Parent: =>Folder.folder1 imageWithoutTitleContainingDots: Filename: assets/ImageTest/test.image.with.dots.png - Parent: =>Folder.folder1 \ No newline at end of file + Parent: =>Folder.folder1 + imageWithMetacharacters: + Title: This is a/an image Title + Filename: assets/ImageTest/test_image*).png + Parent: =>Folder.folder1