commit caca77779182a75fac28b64983cdd8891df56750
parent e8cd6d9cbfa544a7394913755f1e12ab2f442fe5
Author: markseu <mark2011@mayberg.se>
Date: Thu, 12 Dec 2013 23:35:36 +0100
Better image detection
Diffstat:
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/system/core/core.php b/system/core/core.php
@@ -5,7 +5,7 @@
// Yellow main class
class Yellow
{
- const Version = "0.2.3";
+ const Version = "0.2.4";
var $page; //current page data
var $pages; //current page tree from file system
var $config; //configuration
@@ -1638,20 +1638,23 @@ class YellowToolbox
$height = (ord($dataHeader[14])<<8) + ord($dataHeader[15]);
}
} else if(substru($fileName, -3) == "jpg") {
- $dataBuffer = fread($fileHandle, 2048);
+ $dataBufferSize = min(filesize($fileName), 8192);
+ $dataBuffer = fread($fileHandle, $dataBufferSize);
$dataSignature = substrb($dataBuffer, 0, 11);
if(!feof($fileHandle) && $dataSignature=="\xff\xd8\xff\xe0\x00\x10JFIF\0")
{
- $marker = substrb($dataBuffer, 20, 2);
- $length = (ord($dataBuffer[22])<<8) + ord($dataBuffer[23]) + 2;
- $pos = 158 + ($marker=="\xff\xe1" ? $length : 0);
- if($pos+8 < 2048)
+ for($pos=20; $pos+8<$dataBufferSize; $pos+=$length)
{
- $width = (ord($dataBuffer[$pos+7])<<8) + ord($dataBuffer[$pos+8]);
- $height = (ord($dataBuffer[$pos+5])<<8) + ord($dataBuffer[$pos+6]);
+ if($dataBuffer[$pos] != "\xff") break;
+ if($dataBuffer[$pos+1]=="\xc0" || $dataBuffer[$pos+1]=="\xc2")
+ {
+ $width = (ord($dataBuffer[$pos+7])<<8) + ord($dataBuffer[$pos+8]);
+ $height = (ord($dataBuffer[$pos+5])<<8) + ord($dataBuffer[$pos+6]);
+ break;
+ }
+ $length = (ord($dataBuffer[$pos+2])<<8) + ord($dataBuffer[$pos+3]) + 2;
}
}
-
}
fclose($fileHandle);
}