1
0
mirror of https://github.com/mosbth/cimage.git synced 2025-08-28 09:59:54 +02:00

Compare commits

..

8 Commits
079 ... 0710

Author SHA1 Message Date
Mikael Roos
71816261f2 prepare to merge master 2016-04-01 10:27:33 +02:00
Mikael Roos
a62d7cb6c2 Add backup option for images src-alt, #141. 2016-04-01 10:24:24 +02:00
Mikael Roos
ccbd08949f add for testcase #134 2016-01-26 17:40:10 +01:00
Mikael Roos
6467fcc748 Add require of ext-gd in composer.json, #133. 2016-01-14 16:19:00 +01:00
Mikael Roos
14d22a18e5 Merge pull request #133 from abcdmitry/patch-1
Add GD extension to the composer requiremets
2016-01-14 16:17:43 +01:00
Dmitry Lukashin
6d3687d838 Add PHP extensions to the composer requirements 2016-01-14 16:03:13 +03:00
Mikael Roos
ad8f6c12ee creating bundles 2015-12-07 17:40:00 +01:00
Mikael Roos
ad4930c3ae Fix strict mode only reporting 404 when failure, #127. 2015-12-07 17:39:34 +01:00
8 changed files with 169 additions and 49 deletions

View File

@@ -5,6 +5,14 @@ Revision history
[![Build Status](https://scrutinizer-ci.com/g/mosbth/cimage/badges/build.png?b=master)](https://scrutinizer-ci.com/g/mosbth/cimage/build-status/master) [![Build Status](https://scrutinizer-ci.com/g/mosbth/cimage/badges/build.png?b=master)](https://scrutinizer-ci.com/g/mosbth/cimage/build-status/master)
v0.7.10 (2016-04-01)
-------------------------------------
* Add backup option for images `src-alt`, #141.
* Add require of ext-gd in composer.json, #133.
* Fix strict mode only reporting 404 when failure, #127.
v0.7.9 (2015-12-07) v0.7.9 (2015-12-07)
------------------------------------- -------------------------------------

View File

@@ -18,7 +18,11 @@
"docs": "http://dbwebb.se/opensource/cimage" "docs": "http://dbwebb.se/opensource/cimage"
}, },
"require": { "require": {
"php": ">=5.3" "php": ">=5.3",
"ext-gd": "*"
},
"suggest": {
"ext-exif": "*"
}, },
"autoload": { "autoload": {
"classmap": [ "classmap": [

View File

@@ -8,7 +8,7 @@
* *
*/ */
$version = "v0.7.9 (2015-12-07)"; $version = "v0.7.9* (2015-12-07)";
// For CRemoteImage // For CRemoteImage
define("CIMAGE_USER_AGENT", "CImage/$version"); define("CIMAGE_USER_AGENT", "CImage/$version");
@@ -38,16 +38,16 @@ function errorPage($msg, $type = 500)
$header = "500 Internal Server Error"; $header = "500 Internal Server Error";
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
header("HTTP/1.0 $header"); header("HTTP/1.0 $header");
if ($mode == "development") { if ($mode == "development") {
die("[img.php] $msg"); die("[img.php] $msg");
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
error_log("[img.php] $msg"); error_log("[img.php] $msg");
die("HTTP/1.0 $header"); die("HTTP/1.0 $header");
} }
@@ -409,18 +409,28 @@ if (isset($shortcut)
$srcImage = urldecode(get('src')) $srcImage = urldecode(get('src'))
or errorPage('Must set src-attribute.', 404); or errorPage('Must set src-attribute.', 404);
// Get settings for src-alt as backup image
$srcAltImage = urldecode(get('src-alt', null));
$srcAltConfig = getConfig('src_alt', null);
if (empty($srcAltImage)) {
$srcAltImage = $srcAltConfig;
}
// Check for valid/invalid characters // Check for valid/invalid characters
$imagePath = getConfig('image_path', __DIR__ . '/img/'); $imagePath = getConfig('image_path', __DIR__ . '/img/');
$imagePathConstraint = getConfig('image_path_constraint', true); $imagePathConstraint = getConfig('image_path_constraint', true);
$validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#'); $validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#');
// Source is remote
$remoteSource = false;
// Dummy image feature // Dummy image feature
$dummyEnabled = getConfig('dummy_enabled', true); $dummyEnabled = getConfig('dummy_enabled', true);
$dummyFilename = getConfig('dummy_filename', 'dummy'); $dummyFilename = getConfig('dummy_filename', 'dummy');
$dummyImage = false; $dummyImage = false;
preg_match($validFilename, $srcImage) preg_match($validFilename, $srcImage)
or errorPage('Filename contains invalid characters.', 404); or errorPage('Source filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) { if ($dummyEnabled && $srcImage === $dummyFilename) {
@@ -430,19 +440,40 @@ if ($dummyEnabled && $srcImage === $dummyFilename) {
} elseif ($allowRemote && $img->isRemoteSource($srcImage)) { } elseif ($allowRemote && $img->isRemoteSource($srcImage)) {
// If source is a remote file, ignore local file checks. // If source is a remote file, ignore local file checks.
$remoteSource = true;
} elseif ($imagePathConstraint) { } else {
// Check that the image is a file below the directory 'image_path'. // Check if file exists on disk or try using src-alt
$pathToImage = realpath($imagePath . $srcImage); $pathToImage = realpath($imagePath . $srcImage);
$imageDir = realpath($imagePath);
is_file($pathToImage) if (!is_file($pathToImage) && !empty($srcAltImage)) {
or errorPage( // Try using the src-alt instead
'Source image is not a valid file, check the filename and that a $srcImage = $srcAltImage;
matching file exists on the filesystem.', $pathToImage = realpath($imagePath . $srcImage);
404
); preg_match($validFilename, $srcImage)
or errorPage('Source (alt) filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) {
// Check if src-alt is the dummy image
$dummyImage = true;
}
}
if (!$dummyImage) {
is_file($pathToImage)
or errorPage(
'Source image is not a valid file, check the filename and that a
matching file exists on the filesystem.',
404
);
}
}
if ($imagePathConstraint && !$dummyImage && !$remoteSource) {
// Check that the image is a file below the directory 'image_path'.
$imageDir = realpath($imagePath);
substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0 substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0
or errorPage( or errorPage(

BIN
webroot/img/planet.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -98,6 +98,20 @@ return array(
/**
* Use backup image if src-image is not found on disk. The backup image
* is only available for local images and based on wether the original
* image is found on disk or not. The backup image must be a local image
* or the dummy image.
*
* Default value:
* src_alt: null //disabled by default
*/
//'src_alt' => 'car.png',
//'src_alt' => 'dummy',
/** /**
* A regexp for validating characters in the image or alias filename. * A regexp for validating characters in the image or alias filename.
* *
@@ -188,7 +202,8 @@ return array(
/** /**
* Check that the imagefile is a file below 'image_path' using realpath(). * Check that the imagefile is a file below 'image_path' using realpath().
* Security constraint to avoid reaching images outside image_path. * Security constraint to avoid reaching images outside image_path.
* This means that symbolic links to images outside the image_path will fail. * This means that symbolic links to images outside the image_path will
* fail.
* *
* Default value: * Default value:
* image_path_constraint: true * image_path_constraint: true

View File

@@ -3817,7 +3817,7 @@ class CCache
* *
*/ */
$version = "v0.7.9 (2015-12-07)"; $version = "v0.7.9* (2015-12-07)";
// For CRemoteImage // For CRemoteImage
define("CIMAGE_USER_AGENT", "CImage/$version"); define("CIMAGE_USER_AGENT", "CImage/$version");
@@ -3847,16 +3847,16 @@ function errorPage($msg, $type = 500)
$header = "500 Internal Server Error"; $header = "500 Internal Server Error";
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
header("HTTP/1.0 $header"); header("HTTP/1.0 $header");
if ($mode == "development") { if ($mode == "development") {
die("[img.php] $msg"); die("[img.php] $msg");
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
error_log("[img.php] $msg"); error_log("[img.php] $msg");
die("HTTP/1.0 $header"); die("HTTP/1.0 $header");
} }
@@ -4218,18 +4218,28 @@ if (isset($shortcut)
$srcImage = urldecode(get('src')) $srcImage = urldecode(get('src'))
or errorPage('Must set src-attribute.', 404); or errorPage('Must set src-attribute.', 404);
// Get settings for src-alt as backup image
$srcAltImage = urldecode(get('src-alt', null));
$srcAltConfig = getConfig('src_alt', null);
if (empty($srcAltImage)) {
$srcAltImage = $srcAltConfig;
}
// Check for valid/invalid characters // Check for valid/invalid characters
$imagePath = getConfig('image_path', __DIR__ . '/img/'); $imagePath = getConfig('image_path', __DIR__ . '/img/');
$imagePathConstraint = getConfig('image_path_constraint', true); $imagePathConstraint = getConfig('image_path_constraint', true);
$validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#'); $validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#');
// Source is remote
$remoteSource = false;
// Dummy image feature // Dummy image feature
$dummyEnabled = getConfig('dummy_enabled', true); $dummyEnabled = getConfig('dummy_enabled', true);
$dummyFilename = getConfig('dummy_filename', 'dummy'); $dummyFilename = getConfig('dummy_filename', 'dummy');
$dummyImage = false; $dummyImage = false;
preg_match($validFilename, $srcImage) preg_match($validFilename, $srcImage)
or errorPage('Filename contains invalid characters.', 404); or errorPage('Source filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) { if ($dummyEnabled && $srcImage === $dummyFilename) {
@@ -4239,19 +4249,40 @@ if ($dummyEnabled && $srcImage === $dummyFilename) {
} elseif ($allowRemote && $img->isRemoteSource($srcImage)) { } elseif ($allowRemote && $img->isRemoteSource($srcImage)) {
// If source is a remote file, ignore local file checks. // If source is a remote file, ignore local file checks.
$remoteSource = true;
} elseif ($imagePathConstraint) { } else {
// Check that the image is a file below the directory 'image_path'. // Check if file exists on disk or try using src-alt
$pathToImage = realpath($imagePath . $srcImage); $pathToImage = realpath($imagePath . $srcImage);
$imageDir = realpath($imagePath);
is_file($pathToImage) if (!is_file($pathToImage) && !empty($srcAltImage)) {
or errorPage( // Try using the src-alt instead
'Source image is not a valid file, check the filename and that a $srcImage = $srcAltImage;
matching file exists on the filesystem.', $pathToImage = realpath($imagePath . $srcImage);
404
); preg_match($validFilename, $srcImage)
or errorPage('Source (alt) filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) {
// Check if src-alt is the dummy image
$dummyImage = true;
}
}
if (!$dummyImage) {
is_file($pathToImage)
or errorPage(
'Source image is not a valid file, check the filename and that a
matching file exists on the filesystem.',
404
);
}
}
if ($imagePathConstraint && !$dummyImage && !$remoteSource) {
// Check that the image is a file below the directory 'image_path'.
$imageDir = realpath($imagePath);
substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0 substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0
or errorPage( or errorPage(

View File

@@ -3817,7 +3817,7 @@ class CCache
* *
*/ */
$version = "v0.7.9 (2015-12-07)"; $version = "v0.7.9* (2015-12-07)";
// For CRemoteImage // For CRemoteImage
define("CIMAGE_USER_AGENT", "CImage/$version"); define("CIMAGE_USER_AGENT", "CImage/$version");
@@ -3847,16 +3847,16 @@ function errorPage($msg, $type = 500)
$header = "500 Internal Server Error"; $header = "500 Internal Server Error";
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
header("HTTP/1.0 $header"); header("HTTP/1.0 $header");
if ($mode == "development") { if ($mode == "development") {
die("[img.php] $msg"); die("[img.php] $msg");
} }
if ($mode == "strict") {
$header = "404 Not Found";
}
error_log("[img.php] $msg"); error_log("[img.php] $msg");
die("HTTP/1.0 $header"); die("HTTP/1.0 $header");
} }
@@ -4218,18 +4218,28 @@ if (isset($shortcut)
$srcImage = urldecode(get('src')) $srcImage = urldecode(get('src'))
or errorPage('Must set src-attribute.', 404); or errorPage('Must set src-attribute.', 404);
// Get settings for src-alt as backup image
$srcAltImage = urldecode(get('src-alt', null));
$srcAltConfig = getConfig('src_alt', null);
if (empty($srcAltImage)) {
$srcAltImage = $srcAltConfig;
}
// Check for valid/invalid characters // Check for valid/invalid characters
$imagePath = getConfig('image_path', __DIR__ . '/img/'); $imagePath = getConfig('image_path', __DIR__ . '/img/');
$imagePathConstraint = getConfig('image_path_constraint', true); $imagePathConstraint = getConfig('image_path_constraint', true);
$validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#'); $validFilename = getConfig('valid_filename', '#^[a-z0-9A-Z-/_ \.:]+$#');
// Source is remote
$remoteSource = false;
// Dummy image feature // Dummy image feature
$dummyEnabled = getConfig('dummy_enabled', true); $dummyEnabled = getConfig('dummy_enabled', true);
$dummyFilename = getConfig('dummy_filename', 'dummy'); $dummyFilename = getConfig('dummy_filename', 'dummy');
$dummyImage = false; $dummyImage = false;
preg_match($validFilename, $srcImage) preg_match($validFilename, $srcImage)
or errorPage('Filename contains invalid characters.', 404); or errorPage('Source filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) { if ($dummyEnabled && $srcImage === $dummyFilename) {
@@ -4239,19 +4249,40 @@ if ($dummyEnabled && $srcImage === $dummyFilename) {
} elseif ($allowRemote && $img->isRemoteSource($srcImage)) { } elseif ($allowRemote && $img->isRemoteSource($srcImage)) {
// If source is a remote file, ignore local file checks. // If source is a remote file, ignore local file checks.
$remoteSource = true;
} elseif ($imagePathConstraint) { } else {
// Check that the image is a file below the directory 'image_path'. // Check if file exists on disk or try using src-alt
$pathToImage = realpath($imagePath . $srcImage); $pathToImage = realpath($imagePath . $srcImage);
$imageDir = realpath($imagePath);
is_file($pathToImage) if (!is_file($pathToImage) && !empty($srcAltImage)) {
or errorPage( // Try using the src-alt instead
'Source image is not a valid file, check the filename and that a $srcImage = $srcAltImage;
matching file exists on the filesystem.', $pathToImage = realpath($imagePath . $srcImage);
404
); preg_match($validFilename, $srcImage)
or errorPage('Source (alt) filename contains invalid characters.', 404);
if ($dummyEnabled && $srcImage === $dummyFilename) {
// Check if src-alt is the dummy image
$dummyImage = true;
}
}
if (!$dummyImage) {
is_file($pathToImage)
or errorPage(
'Source image is not a valid file, check the filename and that a
matching file exists on the filesystem.',
404
);
}
}
if ($imagePathConstraint && !$dummyImage && !$remoteSource) {
// Check that the image is a file below the directory 'image_path'.
$imageDir = realpath($imagePath);
substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0 substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0
or errorPage( or errorPage(

File diff suppressed because one or more lines are too long