Merge commit '42a5a127b6a55483c800a7f459b12fc62c63c6a5' into v4.x

This commit is contained in:
Misty Release Bot
2025-04-22 16:33:38 +00:00
5 changed files with 52 additions and 7 deletions

View File

@@ -1,3 +1,34 @@
#### v4.2.1 (2025-04-10)
##### Chores
* up harmony (d161eb6f)
* up persona (2237e17a)
* up persona (75f1f6fb)
* incrementing version number - v4.2.0 (87581958)
* update changelog for v4.2.0 (c9e0198d)
* incrementing version number - v4.1.1 (b2afbb16)
* incrementing version number - v4.1.0 (36c80850)
* incrementing version number - v4.0.6 (4a52fb2e)
* incrementing version number - v4.0.5 (1792a62b)
* incrementing version number - v4.0.4 (b1125cce)
* incrementing version number - v4.0.3 (2b65c735)
* incrementing version number - v4.0.2 (73fe5fcf)
* incrementing version number - v4.0.1 (a461b758)
* incrementing version number - v4.0.0 (c1eaee45)
##### Bug Fixes
* closes #13317, fix email confirm for changing email (33d50637)
* check if latestversion is valid before using semver.gt (6fe066ce)
* closes #13256, allow keyboard access to icon colors (c6620170)
##### Refactors
* get rid of async.parallel (e722e869)
* remove pointless true (747457d7)
* make register intro heading (c258f597)
#### v4.2.0 (2025-03-19)
##### Chores

View File

@@ -31,6 +31,8 @@ define('forum/topic/delete-posts', [
postSelect.init(function () {
checkButtonEnable();
showPostsSelected();
}, {
allowMainPostSelect: true,
});
showPostsSelected();

View File

@@ -151,7 +151,15 @@ module.exports = function (Categories) {
}
async function generateHandle(slug) {
let taken = await meta.slugTaken(slug);
let taken;
try {
taken = await meta.slugTaken(slug);
} catch (e) {
// invalid slug passed in
slug = 'category';
taken = true;
}
let suffix;
while (taken) {
suffix = utils.generateUUID().slice(0, 8);

View File

@@ -1,5 +1,6 @@
'use strict';
const validator = require('validator');
const _ = require('lodash');
const nconf = require('nconf');
const db = require('../database');
@@ -107,7 +108,13 @@ function renderUser(event) {
if (!event.user || event.user.system) {
return '[[global:system-user]]';
}
return `${helpers.buildAvatar(event.user, '16px', true)} <a href="${relative_path}/user/${event.user.userslug}">${event.user.displayname}</a>`;
const user = {
...event.user,
displayname: validator.escape(String(event.user.displayname)),
};
return `${helpers.buildAvatar(user, '16px', true)} <a href="${relative_path}/user/${user.userslug}">${user.displayname}</a>`;
}
function renderTimeago(event) {

View File

@@ -58,11 +58,8 @@ module.exports = function (User) {
]);
}
const [followingCount, followingRemoteCount, followerCount, followerRemoteCount] = await Promise.all([
db.sortedSetCard(`following:${uid}`),
db.sortedSetCard(`followingRemote:${uid}`),
db.sortedSetCard(`followers:${theiruid}`),
db.sortedSetCard(`followersRemote:${theiruid}`),
const [followingCount, followingRemoteCount, followerCount, followerRemoteCount] = await db.sortedSetsCard([
`following:${uid}`, `followingRemote:${uid}`, `followers:${theiruid}`, `followersRemote:${theiruid}`,
]);
await Promise.all([
User.setUserField(uid, 'followingCount', followingCount + followingRemoteCount),