X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Flibs%2Fmime%2FMimeAnalyzer.php;h=0083e4b32a7ce6fc688ec1167d5858ce5cde4ec8;hp=c361fdfa0d8d123be9e80706b4d0d8e5f7de4438;hb=f7e1770fb832aa77bf4e16ce8cc815f2b24dd10d;hpb=55faf05e1118edf1073aa5cbddd7401ea244a1d2 diff --git a/includes/libs/mime/MimeAnalyzer.php b/includes/libs/mime/MimeAnalyzer.php index c361fdfa0d..0083e4b32a 100644 --- a/includes/libs/mime/MimeAnalyzer.php +++ b/includes/libs/mime/MimeAnalyzer.php @@ -533,6 +533,9 @@ EOT; // XML formats we sure hope we recognize reliably 'svg', + + // 3D formats + 'stl', ]; return in_array( strtolower( $extension ), $types ); } @@ -804,6 +807,23 @@ EOT; return $this->detectZipType( $head, $tail, $ext ); } + // Check for STL (3D) files + // @see https://en.wikipedia.org/wiki/STL_(file_format) + if ( $fsize >= 15 && + stripos( $head, 'SOLID ' ) === 0 && + preg_match( '/\RENDSOLID .*$/i', $tail ) ) { + // ASCII STL file + return 'application/sla'; + } elseif ( $fsize > 84 ) { + // binary STL file + $triangles = substr( $head, 80, 4 ); + $triangles = unpack( 'V', $triangles ); + $triangles = reset( $triangles ); + if ( $triangles !== false && $fsize === 84 + ( $triangles * 50 ) ) { + return 'application/sla'; + } + } + MediaWiki\suppressWarnings(); $gis = getimagesize( $file ); MediaWiki\restoreWarnings();