Version Description
(released: 26 jun 2019)
- Fixed conversion errors using Bulk convert or Test convert on systems with symlinked folders
Download this release
Release Info
Developer | rosell.dk |
Plugin | WebP Express |
Version | 0.14.16 |
Comparing to | |
See all releases |
Code changes from version 0.14.15 to 0.14.16
- README.txt +9 -1
- lib/classes/Convert.php +8 -4
- lib/classes/ConvertHelperIndependent.php +1 -1
- lib/classes/SanityCheck.php +37 -4
- webp-express.php +1 -1
README.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://ko-fi.com/rosell
|
|
4 |
Tags: webp, images, performance
|
5 |
Requires at least: 4.0
|
6 |
Tested up to: 5.2
|
7 |
-
Stable tag: 0.14.
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv3
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
@@ -608,6 +608,11 @@ Easy enough! - [Go here!](https://ko-fi.com/rosell). Or [here](https://buymeacof
|
|
608 |
|
609 |
== Changelog ==
|
610 |
|
|
|
|
|
|
|
|
|
|
|
611 |
= 0.14.15 =
|
612 |
*(released: 26 jun 2019)*
|
613 |
|
@@ -886,6 +891,9 @@ For older releases, check out changelog.txt
|
|
886 |
|
887 |
== Upgrade Notice ==
|
888 |
|
|
|
|
|
|
|
889 |
= 0.14.15 =
|
890 |
* Fixed errors with "redirect to conversion script"
|
891 |
|
4 |
Tags: webp, images, performance
|
5 |
Requires at least: 4.0
|
6 |
Tested up to: 5.2
|
7 |
+
Stable tag: 0.14.16
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv3
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
608 |
|
609 |
== Changelog ==
|
610 |
|
611 |
+
= 0.14.16 =
|
612 |
+
*(released: 26 jun 2019)*
|
613 |
+
|
614 |
+
* Fixed conversion errors using Bulk convert or Test convert on systems with symlinked folders
|
615 |
+
|
616 |
= 0.14.15 =
|
617 |
*(released: 26 jun 2019)*
|
618 |
|
891 |
|
892 |
== Upgrade Notice ==
|
893 |
|
894 |
+
= 0.14.16 =
|
895 |
+
* Fixed more errors on systems with symlinked folders
|
896 |
+
|
897 |
= 0.14.15 =
|
898 |
* Fixed errors with "redirect to conversion script"
|
899 |
|
lib/classes/Convert.php
CHANGED
@@ -32,8 +32,9 @@ class Convert
|
|
32 |
try {
|
33 |
// Check source
|
34 |
// ---------------
|
35 |
-
$checking = 'filename';
|
36 |
-
$filename =
|
|
|
37 |
// PS: No need to check mime type as the WebPConvert library does that (it only accepts image/jpeg and image/png)
|
38 |
|
39 |
|
@@ -49,6 +50,7 @@ class Convert
|
|
49 |
|
50 |
// Check convert options
|
51 |
// -------------------------------
|
|
|
52 |
if (is_null($convertOptions)) {
|
53 |
$wodOptions = Config::generateWodOptionsFromConfigObj($config);
|
54 |
if (!isset($wodOptions['webp-convert']['convert'])) {
|
@@ -63,12 +65,14 @@ class Convert
|
|
63 |
|
64 |
// Check destination
|
65 |
// -------------------------------
|
|
|
66 |
$destination = self::getDestination($source, $config);
|
67 |
-
$destination = SanityCheck::absPathIsInDocRoot($destination);
|
68 |
|
|
|
69 |
|
70 |
// Check log dir
|
71 |
// -------------------------------
|
|
|
72 |
$logDir = SanityCheck::absPathIsInDocRoot(Paths::getWebPExpressContentDirAbs() . '/log');
|
73 |
|
74 |
|
@@ -142,7 +146,7 @@ class Convert
|
|
142 |
$checking = '"filename" argument';
|
143 |
Validate::postHasKey('filename');
|
144 |
$filename = sanitize_text_field($_POST['filename']);
|
145 |
-
|
146 |
// PS: No need to check mime version as webp-convert does that.
|
147 |
|
148 |
|
32 |
try {
|
33 |
// Check source
|
34 |
// ---------------
|
35 |
+
$checking = 'filename!';
|
36 |
+
$filename = $source;
|
37 |
+
//$filename = SanityCheck::absPathExistsAndIsFileInDocRoot($source);
|
38 |
// PS: No need to check mime type as the WebPConvert library does that (it only accepts image/jpeg and image/png)
|
39 |
|
40 |
|
50 |
|
51 |
// Check convert options
|
52 |
// -------------------------------
|
53 |
+
$checking = 'configuration file (options)';
|
54 |
if (is_null($convertOptions)) {
|
55 |
$wodOptions = Config::generateWodOptionsFromConfigObj($config);
|
56 |
if (!isset($wodOptions['webp-convert']['convert'])) {
|
65 |
|
66 |
// Check destination
|
67 |
// -------------------------------
|
68 |
+
$checking = 'destination';
|
69 |
$destination = self::getDestination($source, $config);
|
|
|
70 |
|
71 |
+
$destination = SanityCheck::absPathIsInDocRoot($destination);
|
72 |
|
73 |
// Check log dir
|
74 |
// -------------------------------
|
75 |
+
$checking = 'conversion log dir';
|
76 |
$logDir = SanityCheck::absPathIsInDocRoot(Paths::getWebPExpressContentDirAbs() . '/log');
|
77 |
|
78 |
|
146 |
$checking = '"filename" argument';
|
147 |
Validate::postHasKey('filename');
|
148 |
$filename = sanitize_text_field($_POST['filename']);
|
149 |
+
//$filename = SanityCheck::absPathExistsAndIsFileInDocRoot($filename);
|
150 |
// PS: No need to check mime version as webp-convert does that.
|
151 |
|
152 |
|
lib/classes/ConvertHelperIndependent.php
CHANGED
@@ -329,7 +329,7 @@ APACHE
|
|
329 |
|
330 |
$text = preg_replace('#' . preg_quote($_SERVER["DOCUMENT_ROOT"]) . '#', '[doc-root]', $text);
|
331 |
|
332 |
-
$text = 'WebP Express 0.14.
|
333 |
|
334 |
$logFile = self::getLogFilename($source, $logDir);
|
335 |
|
329 |
|
330 |
$text = preg_replace('#' . preg_quote($_SERVER["DOCUMENT_ROOT"]) . '#', '[doc-root]', $text);
|
331 |
|
332 |
+
$text = 'WebP Express 0.14.16. ' . $msgTop . ', ' . date("Y-m-d H:i:s") . "\n\r\n\r" . $text;
|
333 |
|
334 |
$logFile = self::getLogFilename($source, $logDir);
|
335 |
|
lib/classes/SanityCheck.php
CHANGED
@@ -115,13 +115,47 @@ class SanityCheck
|
|
115 |
return $input;
|
116 |
}
|
117 |
|
118 |
-
public static function absPath($input)
|
119 |
{
|
|
|
|
|
|
|
120 |
return self::path($input);
|
121 |
}
|
122 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
public static function absPathIsInDocRoot($input, $errorMsg = 'Path is outside document root')
|
124 |
{
|
|
|
|
|
125 |
$docRoot = self::absPath($_SERVER["DOCUMENT_ROOT"]);
|
126 |
$docRoot = rtrim($docRoot, '/');
|
127 |
$docRoot = self::absPathExistsAndIsDir($docRoot);
|
@@ -137,11 +171,10 @@ class SanityCheck
|
|
137 |
|
138 |
try {
|
139 |
// try without symlinks expanded
|
|
|
140 |
self::pathBeginsWith($input, $docRoot . '/', $errorMsg);
|
141 |
} catch (SanityException $e) {
|
142 |
-
|
143 |
-
// if that fails, check with symlinks expanded
|
144 |
-
self::pathBeginsWith(realpath($input), $docRootSymLinksExpanded . '/', $errorMsg);
|
145 |
}
|
146 |
|
147 |
return $input;
|
115 |
return $input;
|
116 |
}
|
117 |
|
118 |
+
public static function absPath($input, $errorMsg = 'Not an absolute path')
|
119 |
{
|
120 |
+
if ((strpos($input, '/') !== 0)) {
|
121 |
+
throw new SanityException($errorMsg . $input);
|
122 |
+
}
|
123 |
return self::path($input);
|
124 |
}
|
125 |
|
126 |
+
private static function findClosestExistingFolderSymLinksExpanded($input) {
|
127 |
+
// Get closest existing folder with symlinks expanded.
|
128 |
+
// this is a bit complicated, as the input path may not yet exist.
|
129 |
+
// in case of realpath failure, we must try with one folder pealed off at the time
|
130 |
+
|
131 |
+
$levelsUp = 1;
|
132 |
+
while (true) {
|
133 |
+
$dir = dirname($input, $levelsUp);
|
134 |
+
$realPathResult = realpath($dir);
|
135 |
+
if ($realPathResult !== false) {
|
136 |
+
return $realPathResult;
|
137 |
+
}
|
138 |
+
if (($dir == '/') || (strlen($dir) < 4)) {
|
139 |
+
return $dir;
|
140 |
+
}
|
141 |
+
$levelsUp++;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
public static function pathBeginsWithSymLinksExpanded($input, $beginsWith, $errorMsg = 'Path is outside allowed path') {
|
146 |
+
$closestExistingFolder = self::findClosestExistingFolderSymLinksExpanded($input);
|
147 |
+
self::pathBeginsWith($closestExistingFolder, $beginsWith, $errorMsg);
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Test that absolute path is in document root.
|
152 |
+
*
|
153 |
+
* It is acceptable if the absolute path does not exist
|
154 |
+
*/
|
155 |
public static function absPathIsInDocRoot($input, $errorMsg = 'Path is outside document root')
|
156 |
{
|
157 |
+
self::absPath($input);
|
158 |
+
|
159 |
$docRoot = self::absPath($_SERVER["DOCUMENT_ROOT"]);
|
160 |
$docRoot = rtrim($docRoot, '/');
|
161 |
$docRoot = self::absPathExistsAndIsDir($docRoot);
|
171 |
|
172 |
try {
|
173 |
// try without symlinks expanded
|
174 |
+
throw new SanityException('Cannot find document root');
|
175 |
self::pathBeginsWith($input, $docRoot . '/', $errorMsg);
|
176 |
} catch (SanityException $e) {
|
177 |
+
self::pathBeginsWithSymLinksExpanded($input, $docRootSymLinksExpanded . '/', $errorMsg);
|
|
|
|
|
178 |
}
|
179 |
|
180 |
return $input;
|
webp-express.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WebP Express
|
4 |
* Plugin URI: https://github.com/rosell-dk/webp-express
|
5 |
* Description: Serve autogenerated WebP images instead of jpeg/png to browsers that supports WebP. Works on anything (media library images, galleries, theme images etc).
|
6 |
-
* Version: 0.14.
|
7 |
* Author: Bjørn Rosell
|
8 |
* Author URI: https://www.bitwise-it.dk
|
9 |
* License: GPL2
|
3 |
* Plugin Name: WebP Express
|
4 |
* Plugin URI: https://github.com/rosell-dk/webp-express
|
5 |
* Description: Serve autogenerated WebP images instead of jpeg/png to browsers that supports WebP. Works on anything (media library images, galleries, theme images etc).
|
6 |
+
* Version: 0.14.16
|
7 |
* Author: Bjørn Rosell
|
8 |
* Author URI: https://www.bitwise-it.dk
|
9 |
* License: GPL2
|