diff options
author | VirtualTam <virtualtam@flibidi.net> | 2017-09-19 22:08:29 +0200 |
---|---|---|
committer | VirtualTam <virtualtam@flibidi.net> | 2017-09-28 21:59:36 +0200 |
commit | 8c322aaba197bab1a9992b731db80d9faa133bc4 (patch) | |
tree | c7f16a6032c8a55cacbf20c62a231f934fa3a169 /application | |
parent | e4325b1517c3d9769c8e0141e37b2845bf8e4d09 (diff) | |
download | Shaarli-8c322aaba197bab1a9992b731db80d9faa133bc4.tar.gz Shaarli-8c322aaba197bab1a9992b731db80d9faa133bc4.tar.zst Shaarli-8c322aaba197bab1a9992b731db80d9faa133bc4.zip |
Robustness: safer gzinflate/zlib usage
Relates to https://github.com/shaarli/Shaarli/pull/846
PHP's `gzinflate()` fails with an error when being passed an empty string
See:
- https://bugs.php.net/bug.php?id=71395
Signed-off-by: VirtualTam <virtualtam@flibidi.net>
Diffstat (limited to 'application')
-rw-r--r-- | application/FileUtils.php | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/application/FileUtils.php b/application/FileUtils.php index a167f642..918cb83b 100644 --- a/application/FileUtils.php +++ b/application/FileUtils.php | |||
@@ -50,7 +50,8 @@ class FileUtils | |||
50 | 50 | ||
51 | /** | 51 | /** |
52 | * Read data from a file containing Shaarli database format content. | 52 | * Read data from a file containing Shaarli database format content. |
53 | * If the file isn't readable or doesn't exists, default data will be returned. | 53 | * |
54 | * If the file isn't readable or doesn't exist, default data will be returned. | ||
54 | * | 55 | * |
55 | * @param string $file File path. | 56 | * @param string $file File path. |
56 | * @param mixed $default The default value to return if the file isn't readable. | 57 | * @param mixed $default The default value to return if the file isn't readable. |
@@ -61,16 +62,21 @@ class FileUtils | |||
61 | { | 62 | { |
62 | // Note that gzinflate is faster than gzuncompress. | 63 | // Note that gzinflate is faster than gzuncompress. |
63 | // See: http://www.php.net/manual/en/function.gzdeflate.php#96439 | 64 | // See: http://www.php.net/manual/en/function.gzdeflate.php#96439 |
64 | if (is_readable($file)) { | 65 | if (! is_readable($file)) { |
65 | return unserialize( | 66 | return $default; |
66 | gzinflate( | 67 | } |
67 | base64_decode( | 68 | |
68 | substr(file_get_contents($file), strlen(self::$phpPrefix), -strlen(self::$phpSuffix)) | 69 | $data = file_get_contents($file); |
69 | ) | 70 | if ($data == '') { |
70 | ) | 71 | return $default; |
71 | ); | ||
72 | } | 72 | } |
73 | 73 | ||
74 | return $default; | 74 | return unserialize( |
75 | gzinflate( | ||
76 | base64_decode( | ||
77 | substr($data, strlen(self::$phpPrefix), -strlen(self::$phpSuffix)) | ||
78 | ) | ||
79 | ) | ||
80 | ); | ||
75 | } | 81 | } |
76 | } | 82 | } |