From c0ef868ad257cd88d222aa70e2093c716a9b42b8 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sun, 6 Feb 2022 16:01:54 +0900
Subject: [PATCH] Fix cast (#8257)

---
 packages/backend/src/server/api/call.ts | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/packages/backend/src/server/api/call.ts b/packages/backend/src/server/api/call.ts
index ea9ab3ccb..18143340a 100644
--- a/packages/backend/src/server/api/call.ts
+++ b/packages/backend/src/server/api/call.ts
@@ -79,11 +79,21 @@ export default async (endpoint: string, user: User | null | undefined, token: Ac
 
 	// Cast non JSON input
 	if (ep.meta.requireFile && ep.meta.params) {
-		const body = (ctx!.request as any).body;
 		for (const k of Object.keys(ep.meta.params)) {
 			const param = ep.meta.params[k];
-			if (['Boolean', 'Number'].includes(param.validator.name) && typeof body[k] === 'string') {
-				body[k] = JSON.parse(body[k]);
+			if (['Boolean', 'Number'].includes(param.validator.name) && typeof data[k] === 'string') {
+				try {
+					data[k] = JSON.parse(data[k]);
+				} catch (e) {
+					throw	new ApiError({
+						message: 'Invalid param.',
+						code: 'INVALID_PARAM',
+						id: '0b5f1631-7c1a-41a6-b399-cce335f34d85',
+					}, {
+						param: k,
+						reason: `cannot cast to ${param.validator.name}`,
+					})
+				}
 			}
 		}
 	}