Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit bc3b7cd

Browse files
author
Jamie Snape
committed
Fix thumbnailer for App Engine
1 parent 13a7933 commit bc3b7cd

File tree

1 file changed

+35
-25
lines changed

1 file changed

+35
-25
lines changed

modules/thumbnailcreator/controllers/components/ImagemagickComponent.php

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -43,36 +43,41 @@
4343
function finfo_buffer($finfo, $string = null, $options = FILEINFO_NONE, $context = null)
4444
{
4545
if ($finfo !== false && !is_null($string) && is_null($context)) {
46-
if ($options === FILEINFO_NONE && ($finfo & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $finfo & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING)) {
46+
if ($options === FILEINFO_NONE && (($finfo & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($finfo & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING)) {
4747
$options = $finfo;
4848
}
4949

50-
if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $options & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING) {
51-
if (substr($string, 8) === "\x89PNG\x0d\x0a\x1a\x0a") {
50+
if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($options & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING) {
51+
$mimeEncoding = 'binary';
52+
53+
if (substr($string, 0, 8) === "\x89PNG\x0d\x0a\x1a\x0a") {
5254
$mimeType = 'image/png';
53-
} elseif (substr($string, 6) === 'GIF87a' || substr($string, 6) === 'GIF89a') {
55+
} elseif (substr($string, 0, 6) === 'GIF87a' || substr($string, 0, 6) === 'GIF89a') {
5456
$mimeType = 'image/gif';
55-
} elseif (substr($string, 4) === "MM\x00\x2a" || substr($string, 4) === "II\x2a\x00") {
57+
} elseif (substr($string, 0, 4) === "MM\x00\x2a" || substr($string, 0, 4) === "II\x2a\x00") {
5658
$mimeType = 'image/tiff';
57-
} elseif (substr($string, 4) === '8BPS') {
59+
} elseif (substr($string, 0, 4) === '8BPS') {
5860
$mimeType = 'image/vnd.adobe.photoshop';
59-
} elseif (substr($string, 3) === "\xFF\xD8\xFF") {
61+
} elseif (substr($string, 0, 3) === "\xFF\xD8\xFF") {
6062
$mimeType = 'image/jpeg';
61-
} elseif (substr($string, 2) === 'BM') {
63+
} elseif (substr($string, 0, 2) === 'BM') {
6264
$mimeType = 'image/bmp';
65+
} elseif (strpos($string, "\x00") !== false) {
66+
$mimeType = 'application/octet-stream';
6367
} else {
64-
return false;
68+
$mimeEncoding = 'utf-8';
69+
$mimeType = 'text/plain';
6570
}
6671

67-
if ($options & FILEINFO_MIME === FILEINFO_MIME) {
68-
return $mimeType.'; charset=binary';
72+
if (($options & FILEINFO_MIME) === FILEINFO_MIME) {
73+
return $mimeType.'; charset='.$mimeEncoding;
6974
}
7075

71-
if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) {
76+
if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE) {
7277
return $mimeType;
7378
}
7479

75-
return 'binary';
80+
return $mimeEncoding;
7681
}
7782
}
7883

@@ -102,14 +107,14 @@ function finfo_close($finfo)
102107
function finfo_file($finfo, $filename = null, $options = FILEINFO_NONE, $context = null)
103108
{
104109
if ($finfo !== false && !is_null($filename)) {
105-
if ($options === FILEINFO_NONE && ($finfo & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $finfo & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING)) {
110+
if ($options === FILEINFO_NONE && (($finfo & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($finfo & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING)) {
106111
$options = $finfo;
107112
}
108113

109-
if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $options & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING) {
114+
if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($options & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING) {
110115
$mimeType = finfo_buffer($finfo, file_get_contents($filename, false, $context), $options, $context);
111116

112-
if ($mimeType === false) {
117+
if ($mimeType === false || $mimeType === 'application/octet-stream') {
113118
$extension = strtolower(end(explode('.', basename($filename))));
114119

115120
switch ($extension) {
@@ -137,22 +142,26 @@ function finfo_file($finfo, $filename = null, $options = FILEINFO_NONE, $context
137142
case 'tiff':
138143
$mimeType = 'image/tiff';
139144
break;
145+
case 'text':
146+
case 'txt':
147+
$mimeType = 'text/plain';
148+
break;
140149
default:
141-
return false;
150+
$mimeType = 'application/octet-stream';
142151
}
152+
}
143153

144-
if ($options & FILEINFO_MIME === FILEINFO_MIME) {
145-
return $mimeType.'; charset=binary';
146-
}
154+
$mimeEncoding = $mimeType === 'text/plain' ? 'utf-8' : 'binary';
147155

148-
if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) {
149-
return $mimeType;
150-
}
156+
if (($options & FILEINFO_MIME) === FILEINFO_MIME) {
157+
return $mimeType.'; charset='.$mimeEncoding;
158+
}
151159

152-
return 'binary';
160+
if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE) {
161+
return $mimeType;
153162
}
154163

155-
return $mimeType;
164+
return $mimeEncoding;
156165
}
157166
}
158167

@@ -348,6 +357,7 @@ public function createThumbnailFromPath($name, $fullPath, $width, $height, $exac
348357

349358
$image->save($pathThumbnail);
350359
} catch (\RuntimeException $exception) {
360+
Zend_Registry::get('logger')->err($exception->getMessage());
351361
throw new Zend_Exception('Thumbnail creation failed');
352362
}
353363
} else {

0 commit comments

Comments
 (0)