From c5ad6599a837fab86789e87579806b95cf0eb23d Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 10 Dec 2022 04:27:25 +0800 Subject: [PATCH] core: use case-sensitive query --- packages/hydrooj/src/model/problem.ts | 3 +-- packages/hydrooj/src/model/storage.ts | 2 +- packages/hydrooj/src/model/user.ts | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 5ff38a5a..6f1e48f6 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -330,8 +330,7 @@ export class ProblemModel { } static async getPrefixList(domainId: string, prefix: string) { - prefix = prefix.toLowerCase(); - const $regex = new RegExp(`\\A${escapeRegExp(prefix)}`, 'gmi'); + const $regex = new RegExp(`^${escapeRegExp(prefix.toLowerCase())}`, 'i'); const filter = { $or: [{ pid: { $regex } }, { title: { $regex } }] }; return await document.getMulti(domainId, document.TYPE_PROBLEM, filter, ['domainId', 'docId', 'pid', 'title']) .limit(20).toArray(); diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index 9e87b648..49b32a50 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -60,7 +60,7 @@ export class StorageModel { if (target.includes('..') || target.includes('//')) throw new Error('Invalid path'); if (target.length && !target.endsWith('/')) target += '/'; const results = await StorageModel.coll.find({ - path: { $regex: new RegExp(`^${escapeRegExp(target)}${recursive ? '' : '[^/]+$'}`, 'i') }, + path: { $regex: `^${escapeRegExp(target)}${recursive ? '' : '[^/]+$'}` }, autoDelete: null, }).toArray(); return results.map((i) => ({ diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index 05457bfb..5df7d011 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -367,8 +367,7 @@ class UserModel { @ArgMethod static async getPrefixList(domainId: string, prefix: string, limit: number = 50) { - prefix = prefix.toLowerCase(); - const $regex = new RegExp(`\\A${escapeRegExp(prefix)}`, 'gmi'); + const $regex = `^${escapeRegExp(prefix.toLowerCase())}`; const udocs = await coll.find({ unameLower: { $regex } }) .limit(limit).project({ _id: 1 }).toArray(); const users = [];