diff options
Diffstat (limited to 'op_crates/fetch/21_formdata.js')
-rw-r--r-- | op_crates/fetch/21_formdata.js | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/op_crates/fetch/21_formdata.js b/op_crates/fetch/21_formdata.js index 106b67da4..00f97f346 100644 --- a/op_crates/fetch/21_formdata.js +++ b/op_crates/fetch/21_formdata.js @@ -442,6 +442,11 @@ * @returns {FormData} */ parse() { + // Body must be at least 2 boundaries + \r\n + -- on the last boundary. + if (this.body.length < (this.boundary.length * 2) + 4) { + throw new TypeError("Form data too short to be valid."); + } + const formData = new FormData(); let headerText = ""; let boundaryIndex = 0; @@ -525,5 +530,23 @@ return parser.parse(); } - globalThis.__bootstrap.formData = { FormData, encodeFormData, parseFormData }; + /** + * @param {FormDataEntry[]} entries + * @returns {FormData} + */ + function formDataFromEntries(entries) { + const fd = new FormData(); + fd[entryList] = entries; + return fd; + } + + webidl.converters["FormData"] = webidl + .createInterfaceConverter("FormData", FormData); + + globalThis.__bootstrap.formData = { + FormData, + encodeFormData, + parseFormData, + formDataFromEntries, + }; })(globalThis); |