summaryrefslogtreecommitdiff
path: root/op_crates/fetch/21_formdata.js
diff options
context:
space:
mode:
Diffstat (limited to 'op_crates/fetch/21_formdata.js')
-rw-r--r--op_crates/fetch/21_formdata.js25
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);