From 25a0a9a7ae5833ae850dad68be7474284676e266 Mon Sep 17 00:00:00 2001 From: Sefa Ilkimen Date: Mon, 19 Oct 2020 04:11:49 +0200 Subject: [PATCH] fix: #372 [Bug] Android: malformed empty multipart requests --- CHANGELOG.md | 4 ++++ package.json | 4 ++-- .../silkimen/cordovahttp/CordovaHttpBase.java | 2 +- test/e2e-specs.js | 19 +++++++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57d630e..067f2fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 3.1.1 + +- Fixed #372: malformed empty multipart request on Android + ## 3.1.0 - Feature #272: add support for aborting requests (thanks russaa) diff --git a/package.json b/package.json index 4fc6db0..b084261 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cordova-plugin-advanced-http", - "version": "3.1.0", + "version": "3.1.1", "description": "Cordova / Phonegap plugin for communicating with HTTP servers using SSL pinning", "scripts": { "updatecert": "node ./scripts/update-e2e-server-cert.js && node ./scripts/update-e2e-client-cert.js", @@ -66,4 +66,4 @@ "wd": "1.12.1", "xml2js": "0.4.23" } -} +} \ No newline at end of file diff --git a/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java b/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java index ecba843..b8f95aa 100644 --- a/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java +++ b/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java @@ -154,7 +154,7 @@ abstract class CordovaHttpBase implements Runnable { } else if ("urlencoded".equals(this.serializer)) { // intentionally left blank, because content type is set in HttpRequest.form() } else if ("multipart".equals(this.serializer)) { - request.contentType("multipart/form-data"); + // intentionally left blank, because content type is set in HttpRequest.part() } } diff --git a/test/e2e-specs.js b/test/e2e-specs.js index 80e175d..3629b8a 100644 --- a/test/e2e-specs.js +++ b/test/e2e-specs.js @@ -1109,6 +1109,25 @@ const tests = [ result.data.status.should.be.equal(-8); } }, + { + description: 'should not send malformed request when FormData is empty #372', + expected: 'resolved: {"status":200, ...', + before: helpers.setMultipartSerializer, + func: function (resolve, reject) { + var ponyfills = cordova.plugin.http.ponyfills; + var formData = new ponyfills.FormData(); + + var url = 'http://httpbin.org/anything'; + var options = { method: 'post', data: formData }; + cordova.plugin.http.sendRequest(url, options, resolve, reject); + }, + validationFunc: function (driver, result) { + helpers.checkResult(result, 'resolved'); + + var parsed = JSON.parse(result.data.data); + parsed.headers['Content-Type'].should.be.equal('application/x-www-form-urlencoded'); + } + }, ]; if (typeof module !== 'undefined' && module.exports) {