diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 5ff38a5a9..6f1e48f62 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 9e87b6487..49b32a50f 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 05457bfba..5df7d011a 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 = [];