Normalize Unicode in uploaded filenames. In particular this is a fix for a problem...
authorBrion Vibber <brion@users.mediawiki.org>
Fri, 3 Sep 2004 07:12:46 +0000 (07:12 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Fri, 3 Sep 2004 07:12:46 +0000 (07:12 +0000)
* Fix for http://bugzilla.wikipedia.org/show_bug.cgi?id=215

includes/SpecialUpload.php
includes/WebRequest.php

index 101cd4b..cb2a81b 100644 (file)
@@ -44,12 +44,12 @@ class UploadForm {
                $this->mSessionKey = $request->getVal( 'wpSessionKey' );
 
                if ( ! $this->mUploadTempName ) {
-                       $this->mUploadTempName = @$_FILES['wpUploadFile']['tmp_name'];
+                       $this->mUploadTempName = $request->getFileTempName( 'wpUploadFile' );
                }
                if ( ! $this->mUploadSize ) {
-                       $this->mUploadSize = @$_FILES['wpUploadFile']['size'];
+                       $this->mUploadSize = $request->getFileSize( 'wpUploadFile' );
                }
-               $this->mOname = $request->getGPCVal( $_FILES['wpUploadFile'], 'name', "" );
+               $this->mOname = $request->getFileName( 'wpUploadFile' );
 
        }
 
index 1cf6928..3f49e8b 100644 (file)
@@ -186,6 +186,44 @@ class WebRequest {
        
                return array( $limit, $offset );
        }
+       
+       /**
+        * Get information on uploaded files
+        */
+       function getFileTempname( $key ) {
+               if( !isset( $_FILES[$key] ) ) {
+                       return NULL;
+               }
+               return $_FILES[$key]['tmp_name'];
+       }
+       
+       function getFileSize( $key ) {
+               if( !isset( $_FILES[$key] ) ) {
+                       return 0;
+               }
+               return $_FILES[$key]['size'];
+       }
+       
+       function getFileName( $key ) {
+               if( !isset( $_FILES[$key] ) ) {
+                       return NULL;
+               }
+               $name = $_FILES[$key]['name'];
+               
+               # Safari sends filenames in HTML-encoded Unicode form D...
+               # Horrid and evil! Let's try to make some kind of sense of it.
+               global $wgUseLatin1;
+               if( $wgUseLatin1 ) {
+                       $name = utf8_encode( $name );
+               }
+               $name = wfMungeToUtf8( $name );
+               $name = UtfNormal::cleanUp( $name );
+               if( $wgUseLatin1 ) {
+                       $name = utf8_decode( $name );
+               }
+               wfDebug( "WebRequest::getFileName() '" . $_FILES[$key]['name'] . "' normalized to '$name'\n" );
+               return $name;
+       }
 }
 
 /**