Page MenuHomePhabricator

mediawiki-xmlgzip-support-r103314.diff

Authored By
bzimport
Nov 21 2014, 9:05 PM
Size
3 KB
Referenced Files
None
Subscribers
None

mediawiki-xmlgzip-support-r103314.diff

Index: includes/MimeMagic.php
===================================================================
--- includes/MimeMagic.php (revision 103311)
+++ includes/MimeMagic.php (working copy)
@@ -469,7 +469,7 @@
'webp',
// XML formats we sure hope we recognize reliably
- 'svg',
+ 'svg', 'svgz',
);
return in_array( strtolower( $extension ), $types );
}
@@ -661,11 +661,16 @@
*/
$xml = new XmlTypeCheck( $file );
if ( $xml->wellFormed ) {
- global $wgXMLMimeTypes;
- if ( isset( $wgXMLMimeTypes[$xml->getRootElement()] ) ) {
- return $wgXMLMimeTypes[$xml->getRootElement()];
- } else {
- return 'application/xml';
+ global $wgXMLMimeTypes, $wgXMLMayBeCompressed;
+ $t = $wgXMLMimeTypes[$xml->getRootElement()];
+ if ( !$xml->compressed ) {
+ if( $t ) {
+ return $t;
+ } else {
+ return 'application/xml';
+ }
+ } elseif ( $wgXMLMayBeCompressed[$t] ) {
+ return $t;
}
}
Index: includes/media/SVGMetadataExtractor.php
===================================================================
--- includes/media/SVGMetadataExtractor.php (revision 103311)
+++ includes/media/SVGMetadataExtractor.php (working copy)
@@ -59,13 +59,13 @@
if ( $size > $wgSVGMetadataCutoff ) {
$this->debug( "SVG is $size bytes, which is bigger than $wgSVGMetadataCutoff. Truncating." );
- $contents = file_get_contents( $source, false, null, -1, $wgSVGMetadataCutoff );
+ $contents = file_get_contents( "compress.zlib://$source", false, null, -1, $wgSVGMetadataCutoff );
if ($contents === false) {
throw new MWException( 'Error reading SVG file.' );
}
$this->reader->XML( $contents, null, LIBXML_NOERROR | LIBXML_NOWARNING );
} else {
- $this->reader->open( $source, null, LIBXML_NOERROR | LIBXML_NOWARNING );
+ $this->reader->open( "compress.zlib://$source", null, LIBXML_NOERROR | LIBXML_NOWARNING );
}
$this->metadata['width'] = self::DEFAULT_WIDTH;
Index: includes/DefaultSettings.php
===================================================================
--- includes/DefaultSettings.php (revision 103311)
+++ includes/DefaultSettings.php (working copy)
@@ -440,6 +440,11 @@
*/
$wgMaxUploadSize = 1024*1024*100; # 100MB
+$wgXMLMayBeCompressed = array(
+ 'image/svg+xml' => true,
+ 'application/x-dia-diagram' => true,
+);
+
/**
* Point the upload navigation link to an external URL
* Useful if you want to use a shared repository by default
Index: includes/XmlTypeCheck.php
===================================================================
--- includes/XmlTypeCheck.php (revision 103311)
+++ includes/XmlTypeCheck.php (working copy)
@@ -20,6 +20,12 @@
public $rootElement = '';
/**
+ * Name of file compression type (can be only 'gzip' by now),
+ * or FALSE if the file is uncompressed.
+ */
+ public $compressed = false;
+
+ /**
* @param $file string filename
* @param $filterCallback callable (optional)
* Function to call to do additional custom validity checks from the
@@ -54,6 +60,18 @@
if ( file_exists( $fname ) ) {
$file = fopen( $fname, "rb" );
+ $gz = fread( $file, 2 );
+ if ( $gz == "\x1F\x8B" ) {
+ if ( function_exists( 'gzopen' ) ) {
+ fclose( $file );
+ $this->compressed = 'gzip';
+ $file = gzopen( $fname, "rb" );
+ } else {
+ return;
+ }
+ } else {
+ fseek( $file, 0, SEEK_SET );
+ }
if ( $file ) {
do {
$chunk = fread( $file, 32768 );

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2207
Default Alt Text
mediawiki-xmlgzip-support-r103314.diff (3 KB)

Event Timeline