Skip to content

Commit 0d1b70e

Browse files
riteshshukla04meta-codesync[bot]
authored andcommitted
fix: formData upload broken in debug builds (#56406)
Summary: So the formData Upload in fetch is broken on 0.85 on main. I tracked down this PR #55456 Also reported here #56404 RCA:- ``` body.isOneShot() body.writeTo(buffer) // This is draining inner file InputStreams ``` Fix is to walk to each children of multipart and check for Oneshot ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [ANDROID][FIXED] - FormData uploads broken in debug builds Pull Request resolved: #56406 Test Plan: Tested on RN tester <img width="416" height="600" alt="image" src="https://github.com/user-attachments/assets/20cae662-e2ba-4fc7-9f8d-d8e365eb95b2" /> Reviewed By: fabriziocucci, huntie Differential Revision: D100258994 Pulled By: alanleedev fbshipit-source-id: aeda47d45db2152027598c949f0e602a586c4cb3
1 parent 8dede75 commit 0d1b70e

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
1919
import java.io.IOException
2020
import java.net.SocketTimeoutException
2121
import okhttp3.Headers
22+
import okhttp3.MultipartBody
2223
import okhttp3.RequestBody
2324
import okio.Buffer
2425

@@ -263,6 +264,13 @@ internal object NetworkEventUtil {
263264
return "[Preview unavailable]"
264265
}
265266

267+
// MultipartBody does not propagate isOneShot() from its parts, so check each
268+
// part explicitly. Reading a one-shot part here would drain the underlying
269+
// stream and cause the real request to fail.
270+
if (body is MultipartBody && body.parts().any { it.body().isOneShot() }) {
271+
return "[Preview unavailable]"
272+
}
273+
266274
return try {
267275
val buffer = Buffer()
268276
body.writeTo(buffer)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ internal object RequestBodyUtil {
146146
}
147147
}
148148

149+
override fun isOneShot(): Boolean = true
150+
149151
@Throws(IOException::class)
150152
override fun writeTo(sink: BufferedSink) {
151153
var source: Source? = null

0 commit comments

Comments
 (0)