Просмотр файла attach_mod/includes/functions_filetypes.php

Размер файла: 5.43Kb
  1. <?php
  2. /***************************************************************************
  3. * mides.ru
  4. * -------------------
  5. ***************************************************************************/
  6. if ( !defined('IN_PHPBB') )
  7. {
  8. die("ERROR!!! THIS FILE PROTECTED. IF YOU SAW THIS REPORT, MEANS HACKERS HERE IS NOTHING TO DO ");
  9. }
  10.  
  11. function read_longint($fp)
  12. {
  13. $data = fread($fp, 4);
  14.  
  15. $value = ord($data[0]) + (ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);
  16. if ($value >= 4294967294)
  17. {
  18. $value -= 4294967296;
  19. }
  20.  
  21. return $value;
  22. }
  23.  
  24. function read_word($fp)
  25. {
  26. $data = fread($fp, 2);
  27.  
  28. $value = ord($data[1]) * 256 + ord($data[0]);
  29. return $value;
  30. }
  31.  
  32. function read_byte($fp)
  33. {
  34. $data = fread($fp, 1);
  35.  
  36. $value = ord($data);
  37. return $value;
  38. }
  39.  
  40. function image_getdimension($file)
  41. {
  42. $size = @getimagesize($file);
  43.  
  44. if ($size[0] != 0 || $size[1] != 0)
  45. {
  46. return $size;
  47. }
  48.  
  49. $fp = @fopen($file, 'rb');
  50. if (!$fp)
  51. {
  52. return $size;
  53. }
  54. $error = false;
  55.  
  56. $tmp_str = fread($fp, 2);
  57. if ($tmp_str == 'BM')
  58. {
  59. $length = read_longint($fp);
  60.  
  61. if ($length <= 6)
  62. {
  63. $error = true;
  64. }
  65.  
  66. if (!$error)
  67. {
  68. $i = read_longint($fp);
  69. if ( $i != 0)
  70. {
  71. $error = true;
  72. }
  73. }
  74.  
  75. if (!$error)
  76. {
  77. $i = read_longint($fp);
  78.  
  79. if ($i != 0x3E && $i != 0x76 && $i != 0x436 && $i != 0x36)
  80. {
  81. $error = true;
  82. }
  83. }
  84.  
  85. if (!$error)
  86. {
  87. $tmp_str = fread($fp, 4);
  88. $width = read_longint($fp);
  89. $height = read_longint($fp);
  90.  
  91. if ($width > 3000 || $height > 3000)
  92. {
  93. $error = true;
  94. }
  95. }
  96. }
  97. else
  98. {
  99. $error = true;
  100. }
  101.  
  102. if (!$error)
  103. {
  104. fclose($fp);
  105. return array(
  106. $width,
  107. $height,
  108. 6
  109. );
  110. }
  111. $error = false;
  112. fclose($fp);
  113.  
  114. $fp = @fopen($file, 'rb');
  115.  
  116. $tmp_str = fread($fp, 3);
  117. if ($tmp_str == 'GIF')
  118. {
  119. $tmp_str = fread($fp, 3);
  120. $width = read_word($fp);
  121. $height = read_word($fp);
  122.  
  123. $info_byte = fread($fp, 1);
  124. $info_byte = ord($info_byte);
  125. if (($info_byte & 0x80) != 0x80 && ($info_byte & 0x80) != 0)
  126. {
  127. $error = true;
  128. }
  129. if (!$error)
  130. {
  131. if (($info_byte & 8) != 0)
  132. {
  133. $error = true;
  134. }
  135.  
  136. }
  137. }
  138. else
  139. {
  140. $error = true;
  141. }
  142.  
  143. if (!$error)
  144. {
  145. fclose($fp);
  146. return array(
  147. $width,
  148. $height,
  149. 1
  150. );
  151. }
  152. $error = false;
  153. fclose($fp);
  154.  
  155. $fp = @fopen($file, 'rb');
  156.  
  157. $tmp_str = fread($fp, 4);
  158. $w1 = read_word($fp);
  159.  
  160. if (intval($w1) < 16)
  161. {
  162. $error = true;
  163. }
  164. if (!$error)
  165. {
  166. $tmp_str = fread($fp, 4);
  167. if ($tmp_str == 'JFIF')
  168. {
  169. $o_byte = fread($fp, 1);
  170. if (intval($o_byte) != 0)
  171. {
  172. $error = true;
  173. }
  174.  
  175. if (!$error)
  176. {
  177. $str = fread($fp, 2);
  178. $b = read_byte($fp);
  179.  
  180. if ($b != 0 && $b != 1 && $b != 2)
  181. {
  182. $error = true;
  183. }
  184. }
  185.  
  186. if (!$error)
  187. {
  188. $width = read_word($fp);
  189. $height = read_word($fp);
  190.  
  191. if ($width <= 0 || $height <= 0)
  192. {
  193. $error = true;
  194. }
  195. }
  196. }
  197. }
  198. else
  199. {
  200. $error = true;
  201. }
  202.  
  203. if (!$error)
  204. {
  205. fclose($fp);
  206. return array(
  207. $width,
  208. $height,
  209. 2
  210. );
  211. }
  212. $error = false;
  213. fclose($fp);
  214.  
  215. $fp = @fopen($file, 'rb');
  216.  
  217. $tmp_str = fread($fp, 3);
  218. if ((ord($tmp_str[0]) == 10) && (ord($tmp_str[1]) == 0 || ord($tmp_str[1]) == 2 || ord($tmp_str[1]) == 3 || ord($tmp_str[1]) == 4 || ord($tmp_str[1]) == 5) && (ord($tmp_str[2]) == 1))
  219. {
  220. $b = fread($fp, 1);
  221.  
  222. if (ord($b) != 1 && ord($b) != 2 && ord($b) != 4 && ord($b) != 8 && ord($b) != 24)
  223. {
  224. $error = true;
  225. }
  226.  
  227. if (!$error)
  228. {
  229. $xmin = read_word($fp);
  230. $ymin = read_word($fp);
  231. $xmax = read_word($fp);
  232. $ymax = read_word($fp);
  233. $tmp_str = fread($fp, 52);
  234. $b = fread($fp, 1);
  235. if ($b != 0)
  236. {
  237. $error = true;
  238. }
  239. }
  240.  
  241. if (!$error)
  242. {
  243. $width = $xmax - $xmin + 1;
  244. $height = $ymax - $ymin + 1;
  245. }
  246. }
  247. else
  248. {
  249. $error = true;
  250. }
  251.  
  252. if (!$error)
  253. {
  254. fclose($fp);
  255. return array(
  256. $width,
  257. $height,
  258. 7
  259. );
  260. }
  261. fclose($fp);
  262.  
  263. return $size;
  264. }
  265.  
  266. define('swf_tag_compressed', chr(0x43).chr(0x57).chr(0x53));
  267. define('swf_tag_identify', chr(0x46).chr(0x57).chr(0x53));
  268.  
  269. function swf_bits($buffer, $pos, $count)
  270. {
  271. $result = 0;
  272. for ($loop = $pos; $loop < $pos + $count; $loop++)
  273. {
  274. $result = $result + ((((ord($buffer[(int)($loop / 8)])) >> (7 - ($loop % 8))) & 0x01) << ($count - ($loop - $pos) - 1));
  275. }
  276.  
  277. return $result;
  278. }
  279.  
  280. function swf_decompress($buffer)
  281. {
  282. if ((function_exists('gzuncompress')) && (substr($buffer, 0, 3) == swf_tag_compressed) && (ord(substr($buffer, 3, 1)) >= 6) )
  283. {
  284. $output = 'F';
  285. $output .= substr ($buffer, 1, 7);
  286. $output .= gzuncompress (substr ($buffer, 8));
  287. return $output;
  288. }
  289. else
  290. {
  291. return $buffer;
  292. }
  293. }
  294.  
  295. function swf_getdimension($file)
  296. {
  297. $size = @getimagesize($file);
  298.  
  299. if ($size[0] != 0 || $size[1] != 0)
  300. {
  301. return $size;
  302. }
  303.  
  304. $fp = @fopen($file, 'rb');
  305. if (!$fp)
  306. {
  307. return $size;
  308. }
  309. $error = false;
  310. $fp = @fopen($file, 'rb');
  311. $buffer = fread($fp, 1024);
  312. if (substr($buffer, 0, 3) == swf_tag_identify || substr($buffer, 0, 3) == swf_tag_compressed)
  313. {
  314. if (substr($buffer, 0, 3) == swf_tag_compressed)
  315. {
  316. fclose($fp);
  317. $fp = @fopen($file, 'rb');
  318. $buffer = fread($fp, filesize($file));
  319. $buffer = swf_decompress($buffer);
  320. }
  321.  
  322. $bits = swf_bits ($buffer, 64, 5);
  323.  
  324. $width = (int)(swf_bits ($buffer, 69 + $bits, $bits) - swf_bits ($buffer, 69, $bits)) / 20;
  325. $height = (int)(swf_bits ($buffer, 69 + (3 * $bits), $bits) - swf_bits ($buffer, 69 + (2 * $bits), $bits)) / 20;
  326. }
  327. else
  328. {
  329. $error = true;
  330. }
  331.  
  332. if (!$error)
  333. {
  334. fclose($fp);
  335. return array(
  336. $width,
  337. $height,
  338. 2
  339. );
  340. }
  341. fclose($fp);
  342.  
  343. return $size;
  344. }
  345.  
  346. ?>