mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	fix: #12025, validity checking on user-provided toPid value
This commit is contained in:
		| @@ -9,6 +9,7 @@ const user = require('../user'); | |||||||
| const topics = require('../topics'); | const topics = require('../topics'); | ||||||
| const categories = require('../categories'); | const categories = require('../categories'); | ||||||
| const groups = require('../groups'); | const groups = require('../groups'); | ||||||
|  | const privileges = require('../privileges'); | ||||||
| const utils = require('../utils'); | const utils = require('../utils'); | ||||||
|  |  | ||||||
| module.exports = function (Posts) { | module.exports = function (Posts) { | ||||||
| @@ -24,9 +25,18 @@ module.exports = function (Posts) { | |||||||
| 			throw new Error('[[error:invalid-uid]]'); | 			throw new Error('[[error:invalid-uid]]'); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (data.toPid && !utils.isNumber(data.toPid)) { | 		if (data.toPid) { | ||||||
|  | 			const toPidExists = await Posts.exists(data.toPid); | ||||||
|  | 			const toPidDeleted = await Posts.getPostField(data.toPid, 'deleted'); | ||||||
|  | 			const canViewToPid = await privileges.posts.can('posts:view_deleted', data.toPid, uid); | ||||||
|  |  | ||||||
|  | 			if ( | ||||||
|  | 				!utils.isNumber(data.toPid) || !toPidExists || | ||||||
|  | 				(toPidDeleted && !canViewToPid) | ||||||
|  | 			) { | ||||||
| 				throw new Error('[[error:invalid-pid]]'); | 				throw new Error('[[error:invalid-pid]]'); | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		const pid = await db.incrObjectField('global', 'nextPid'); | 		const pid = await db.incrObjectField('global', 'nextPid'); | ||||||
| 		let postData = { | 		let postData = { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user