fix: FormData filename in content-disposition#46543
fix: FormData filename in content-disposition#46543foyarash wants to merge 1 commit intofacebook:mainfrom
Conversation
|
Hi @foyarash! Thank you for your pull request and welcome to our community. Action RequiredIn order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. ProcessIn order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks! |
|
Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! |
|
@yungsters has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
|
This pull request was successfully merged by @foyarash in f791fb9 When will my fix make it into a release? | How to file a pick request? |
|
@yungsters merged this pull request in f791fb9. |
Summary: This Pull Request fixes a regression introduced in 7c7e9e6, which adds a `filename*` attribute to the `content-disposition` of a FormData part. However, as the [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#directives) states, there is no `filename*` attribute for the `content-disposition` header in case of a form data. The `filename*` attribute would break the parsing of form data in the request, such as in frameworks like `Next.js` which uses the web implementation of [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request). Fixes #44737 ## 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 --> [General] [Fixed] - Remove non compliant `filename*` attribute in a FormData `content-disposition` header Pull Request resolved: #46543 Test Plan: - Clone the `react-native` repo - Create a simple JS file that will act as a node server and execute it ```javascript const http = require('http'); const server = http.createServer(async function (r, res) { const req = new Request(new URL(r.url, 'http://localhost:3000'), { headers: r.headers, method: r.method, body: r, duplex: 'half', }); const fileData = await req.formData(); console.log(fileData); res.writeHead(200); res.end(); }); server.listen(3000); ``` - Go to `packages/rn-tester` - Add a `useEffect` in `js/RNTesterAppShared.js` ```javascript React.useEffect(() => { const formData = new FormData(); formData.append('file', { uri: 'https://www.gravatar.com/avatar', name: '测试photo/1.jpg', type: 'image/jpeg', }); fetch('http://localhost:3000', { method: 'POST', body: formData, }).then(res => console.log(res.ok)); }); ``` - Run the app on iOS or Android - The node server should output the file added to the FormData with an encoded name Reviewed By: robhogan Differential Revision: D66643317 Pulled By: yungsters fbshipit-source-id: 0d531528005025bff303505363671e854c0a2b63
Summary: This Pull Request fixes a regression introduced in 7c7e9e6, which adds a `filename*` attribute to the `content-disposition` of a FormData part. However, as the [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#directives) states, there is no `filename*` attribute for the `content-disposition` header in case of a form data. The `filename*` attribute would break the parsing of form data in the request, such as in frameworks like `Next.js` which uses the web implementation of [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request). Fixes #44737 ## 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 --> [General] [Fixed] - Remove non compliant `filename*` attribute in a FormData `content-disposition` header Pull Request resolved: #46543 Test Plan: - Clone the `react-native` repo - Create a simple JS file that will act as a node server and execute it ```javascript const http = require('http'); const server = http.createServer(async function (r, res) { const req = new Request(new URL(r.url, 'http://localhost:3000'), { headers: r.headers, method: r.method, body: r, duplex: 'half', }); const fileData = await req.formData(); console.log(fileData); res.writeHead(200); res.end(); }); server.listen(3000); ``` - Go to `packages/rn-tester` - Add a `useEffect` in `js/RNTesterAppShared.js` ```javascript React.useEffect(() => { const formData = new FormData(); formData.append('file', { uri: 'https://www.gravatar.com/avatar', name: '测试photo/1.jpg', type: 'image/jpeg', }); fetch('http://localhost:3000', { method: 'POST', body: formData, }).then(res => console.log(res.ok)); }); ``` - Run the app on iOS or Android - The node server should output the file added to the FormData with an encoded name Reviewed By: robhogan Differential Revision: D66643317 Pulled By: yungsters fbshipit-source-id: 0d531528005025bff303505363671e854c0a2b63
|
This pull request was successfully merged by @foyarash in 78ef1e2. When will my fix make it into a release? | How to file a pick request? |
Summary: This Pull Request fixes a regression introduced in facebook@7c7e9e6, which adds a `filename*` attribute to the `content-disposition` of a FormData part. However, as the [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#directives) states, there is no `filename*` attribute for the `content-disposition` header in case of a form data. The `filename*` attribute would break the parsing of form data in the request, such as in frameworks like `Next.js` which uses the web implementation of [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request). Fixes facebook#44737 ## 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 --> [General] [Fixed] - Remove non compliant `filename*` attribute in a FormData `content-disposition` header Pull Request resolved: facebook#46543 Test Plan: - Clone the `react-native` repo - Create a simple JS file that will act as a node server and execute it ```javascript const http = require('http'); const server = http.createServer(async function (r, res) { const req = new Request(new URL(r.url, 'http://localhost:3000'), { headers: r.headers, method: r.method, body: r, duplex: 'half', }); const fileData = await req.formData(); console.log(fileData); res.writeHead(200); res.end(); }); server.listen(3000); ``` - Go to `packages/rn-tester` - Add a `useEffect` in `js/RNTesterAppShared.js` ```javascript React.useEffect(() => { const formData = new FormData(); formData.append('file', { uri: 'https://www.gravatar.com/avatar', name: '测试photo/1.jpg', type: 'image/jpeg', }); fetch('http://localhost:3000', { method: 'POST', body: formData, }).then(res => console.log(res.ok)); }); ``` - Run the app on iOS or Android - The node server should output the file added to the FormData with an encoded name Reviewed By: robhogan Differential Revision: D66643317 Pulled By: yungsters fbshipit-source-id: 0d531528005025bff303505363671e854c0a2b63
Summary: This Pull Request fixes a regression introduced in 7c7e9e6, which adds a `filename*` attribute to the `content-disposition` of a FormData part. However, as the [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#directives) states, there is no `filename*` attribute for the `content-disposition` header in case of a form data. The `filename*` attribute would break the parsing of form data in the request, such as in frameworks like `Next.js` which uses the web implementation of [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request). Fixes #44737 ## 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 --> [General] [Fixed] - Remove non compliant `filename*` attribute in a FormData `content-disposition` header Pull Request resolved: #46543 Test Plan: - Clone the `react-native` repo - Create a simple JS file that will act as a node server and execute it ```javascript const http = require('http'); const server = http.createServer(async function (r, res) { const req = new Request(new URL(r.url, 'http://localhost:3000'), { headers: r.headers, method: r.method, body: r, duplex: 'half', }); const fileData = await req.formData(); console.log(fileData); res.writeHead(200); res.end(); }); server.listen(3000); ``` - Go to `packages/rn-tester` - Add a `useEffect` in `js/RNTesterAppShared.js` ```javascript React.useEffect(() => { const formData = new FormData(); formData.append('file', { uri: 'https://www.gravatar.com/avatar', name: '测试photo/1.jpg', type: 'image/jpeg', }); fetch('http://localhost:3000', { method: 'POST', body: formData, }).then(res => console.log(res.ok)); }); ``` - Run the app on iOS or Android - The node server should output the file added to the FormData with an encoded name Reviewed By: robhogan Differential Revision: D66643317 Pulled By: yungsters fbshipit-source-id: 0d531528005025bff303505363671e854c0a2b63
|
This pull request was successfully merged by @foyarash in 9e846b4 When will my fix make it into a release? | How to file a pick request? |
Summary:
This Pull Request fixes a regression introduced in 7c7e9e6, which adds a
filename*attribute to thecontent-dispositionof a FormData part. However, as the MDN states, there is nofilename*attribute for thecontent-dispositionheader in case of a form data.The
filename*attribute would break the parsing of form data in the request, such as in frameworks likeNext.jswhich uses the web implementation ofRequest.Fixes #44737
Changelog:
[General] [Fixed] - Remove non compliant
filename*attribute in a FormDatacontent-dispositionheaderTest Plan:
react-nativerepopackages/rn-testeruseEffectinjs/RNTesterAppShared.js