You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-10 22:11:50 +02:00
Server: Trying to fix a request parsing error that can potentially crash the error (#12860)
This commit is contained in:
@@ -75,14 +75,27 @@ export async function formParse(request: IncomingMessage): Promise<FormParseResu
|
||||
// headers
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||
return new Promise((resolve: Function, reject: Function) => {
|
||||
let promiseCompleted = false;
|
||||
|
||||
const form = formidable({
|
||||
allowEmptyFiles: true,
|
||||
minFileSize: 0,
|
||||
});
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||
form.parse(req, (error: any, fields: Fields, files: Files) => {
|
||||
|
||||
try {
|
||||
form.on('error', (error) => {
|
||||
if (promiseCompleted) return;
|
||||
promiseCompleted = true;
|
||||
const wrapped = new Error(`Could not parse form (1): ${error.message}`);
|
||||
reject(wrapped);
|
||||
});
|
||||
|
||||
form.parse(req, (error: Error, fields: Fields, files: Files) => {
|
||||
if (promiseCompleted) return;
|
||||
promiseCompleted = true;
|
||||
|
||||
if (error) {
|
||||
error.message = `Could not parse form: ${error.message}`;
|
||||
error.message = `Could not parse form (2): ${error.message}`;
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
@@ -98,6 +111,13 @@ export async function formParse(request: IncomingMessage): Promise<FormParseResu
|
||||
};
|
||||
resolve(req.__parsed);
|
||||
});
|
||||
} catch (error) {
|
||||
if (promiseCompleted) return;
|
||||
promiseCompleted = true;
|
||||
|
||||
const wrapped = new Error(`Could not parse form (3): ${error.message}`);
|
||||
reject(wrapped);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user