From 3d4e49d3949f98801611d13f86b719f14bbe7877 Mon Sep 17 00:00:00 2001
From: bang9 <gusrn1423@naver.com>
Date: Thu, 30 Dec 2021 01:30:13 +0900
Subject: [PATCH] fix: array should not process as a blob

---
 Libraries/Network/FormData.js                |  2 +-
 Libraries/Network/__tests__/FormData-test.js | 22 ++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/Libraries/Network/FormData.js b/Libraries/Network/FormData.js
index 8ff360688693a2..07e16108bc373f 100644
--- a/Libraries/Network/FormData.js
+++ b/Libraries/Network/FormData.js
@@ -74,7 +74,7 @@ class FormData {
       // an object with a `uri` attribute. Optionally, it can also
       // have a `name` and `type` attribute to specify filename and
       // content type (cf. web Blob interface.)
-      if (typeof value === 'object' && value) {
+      if (typeof value === 'object' && !Array.isArray(value) && value) {
         if (typeof value.name === 'string') {
           headers['content-disposition'] += '; filename="' + value.name + '"';
         }
diff --git a/Libraries/Network/__tests__/FormData-test.js b/Libraries/Network/__tests__/FormData-test.js
index b93b8a5334290f..7d143eb2aa7bbd 100644
--- a/Libraries/Network/__tests__/FormData-test.js
+++ b/Libraries/Network/__tests__/FormData-test.js
@@ -55,4 +55,26 @@ describe('FormData', function () {
     };
     expect(formData.getParts()[0]).toMatchObject(expectedPart);
   });
+
+  it('should return non blob array', function () {
+    formData.append('array', [
+      true,
+      false,
+      undefined,
+      null,
+      {},
+      [],
+      'string',
+      0,
+    ]);
+
+    const expectedPart = {
+      string: 'true,false,,,[object Object],,string,0',
+      headers: {
+        'content-disposition': 'form-data; name="array"',
+      },
+      fieldName: 'array',
+    };
+    expect(formData.getParts()[0]).toMatchObject(expectedPart);
+  });
 });