Fix #6016
This commit is contained in:
		
							parent
							
								
									8e6207f3e9
								
							
						
					
					
						commit
						177e19632a
					
				|  | @ -0,0 +1,3 @@ | |||
| export function safeForSql(text: string): boolean { | ||||
| 	return /[\0\x08\x09\x1a\n\r"'\\\%]/g.test(text); | ||||
| } | ||||
|  | @ -3,6 +3,7 @@ import define from '../../define'; | |||
| import { fetchMeta } from '../../../../misc/fetch-meta'; | ||||
| import { Notes } from '../../../../models'; | ||||
| import { Note } from '../../../../models/entities/note'; | ||||
| import { safeForSql } from '../../../../misc/safe-for-sql'; | ||||
| 
 | ||||
| /* | ||||
| トレンドに載るためには「『直近a分間のユニーク投稿数が今からa分前~今からb分前の間のユニーク投稿数のn倍以上』のハッシュタグの上位5位以内に入る」ことが必要 | ||||
|  | @ -113,7 +114,7 @@ export default define(meta, async () => { | |||
| 	for (let i = 0; i < range; i++) { | ||||
| 		countPromises.push(Promise.all(hots.map(tag => Notes.createQueryBuilder('note') | ||||
| 			.select('count(distinct note.userId)') | ||||
| 			.where(':tag = ANY(note.tags)', { tag: tag }) | ||||
| 			.where(`'{"${safeForSql(tag) ? tag : 'aichan_kawaii'}"}' <@ note.tags`) | ||||
| 			.andWhere('note.createdAt < :lt', { lt: new Date(now.getTime() - (interval * i)) }) | ||||
| 			.andWhere('note.createdAt > :gt', { gt: new Date(now.getTime() - (interval * (i + 1))) }) | ||||
| 			.cache(60000) // 1 min
 | ||||
|  | @ -127,7 +128,7 @@ export default define(meta, async () => { | |||
| 
 | ||||
| 	const totalCounts = await Promise.all(hots.map(tag => Notes.createQueryBuilder('note') | ||||
| 		.select('count(distinct note.userId)') | ||||
| 		.where(':tag = ANY(note.tags)', { tag: tag }) | ||||
| 		.where(`'{"${safeForSql(tag) ? tag : 'aichan_kawaii'}"}' <@ note.tags`) | ||||
| 		.andWhere('note.createdAt > :gt', { gt: new Date(now.getTime() - rangeA) }) | ||||
| 		.cache(60000 * 60) // 60 min
 | ||||
| 		.getRawOne() | ||||
|  |  | |||
|  | @ -99,7 +99,8 @@ export default define(meta, async (ps, me) => { | |||
| 	if (me) generateMuteQuery(query, me); | ||||
| 
 | ||||
| 	if (ps.tag) { | ||||
| 		query.andWhere(':tag = ANY(note.tags)', { tag: ps.tag.toLowerCase() }); | ||||
| 		if (/[\0\x08\x09\x1a\n\r"'\\\%]/g.test(ps.tag)) return; | ||||
| 		query.andWhere(`'{"${ps.tag.toLowerCase()}"}' <@ note.tags`); | ||||
| 	} else { | ||||
| 		let i = 0; | ||||
| 		query.andWhere(new Brackets(qb => { | ||||
|  | @ -143,7 +144,7 @@ export default define(meta, async (ps, me) => { | |||
| 	} | ||||
| 
 | ||||
| 	// Search notes
 | ||||
| 	const notes = await query.take(ps.limit!).getMany(); | ||||
| 	const notes = await query.take(ps.limit!).printSql().getMany(); | ||||
| 
 | ||||
| 	return await Notes.packMany(notes, me); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue