jenkins-bot has submitted this change and it was merged.

Change subject: mw.FormDataTransport: Avoid exceptions when a chunked upload is 
aborted
......................................................................


mw.FormDataTransport: Avoid exceptions when a chunked upload is aborted

We try to abort uploads if an upload is removed while it's being
uploaded. We were handling the 'abort' event incorrectly for chunked
uploads, essentially calling parseResponse() twice. The second call
would be given unexpected data, resulting in 'TypeError: Cannot read
property 'code' of undefined' being thrown. Luckily the exception was
mostly harmless, since the upload was gone anyway.

Bug: T136236
Change-Id: I0230771fd3cbf31013d4b1fa59272f69d8c0d0a9
---
M resources/transports/mw.FormDataTransport.js
1 file changed, 5 insertions(+), 6 deletions(-)

Approvals:
  MarkTraceur: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/resources/transports/mw.FormDataTransport.js 
b/resources/transports/mw.FormDataTransport.js
index 55bd7ad..da9edaf 100644
--- a/resources/transports/mw.FormDataTransport.js
+++ b/resources/transports/mw.FormDataTransport.js
@@ -47,8 +47,7 @@
         * @return {XMLHttpRequest}
         */
        mw.FormDataTransport.prototype.createXHR = function ( deferred ) {
-               var xhr = new XMLHttpRequest(),
-                       transport = this;
+               var xhr = new XMLHttpRequest();
 
                xhr.upload.addEventListener( 'progress', function ( evt ) {
                        var fraction;
@@ -58,10 +57,6 @@
                                fraction = null;
                        }
                        deferred.notify( fraction );
-               }, false );
-
-               xhr.addEventListener( 'abort', function ( evt ) {
-                       deferred.reject( transport.parseResponse( evt ) );
                }, false );
 
                return xhr;
@@ -149,6 +144,9 @@
                        this.xhr.addEventListener( 'error', function ( evt ) {
                                deferred.reject( transport.parseResponse( evt ) 
);
                        }, false );
+                       this.xhr.addEventListener( 'abort', function ( evt ) {
+                               deferred.reject( transport.parseResponse( evt ) 
);
+                       }, false );
 
                        formData = this.createFormData( this.tempname );
                        formData.append( 'file', file );
@@ -192,6 +190,7 @@
                this.xhr = this.createXHR( deferred );
                this.xhr.addEventListener( 'load', deferred.resolve, false );
                this.xhr.addEventListener( 'error', deferred.reject, false );
+               this.xhr.addEventListener( 'abort', deferred.reject, false );
 
                formData = this.createFormData( this.tempname, offset );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/292329
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0230771fd3cbf31013d4b1fa59272f69d8c0d0a9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: Bartosz DziewoƄski <[email protected]>
Gerrit-Reviewer: MarkTraceur <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to