helpers/NotificationHelper.php::notifyWatchers() (~lines 234, 239) — $allNotify = array_unique(array_merge($matrixIds, self::notifyUsers())) runs unconditionally regardless of $visibility, and the title field is never redacted, only extraData['preview'].
Impact: A status-change/comment-added notification for a confidential ticket with watchers still broadcasts that ticket's title to the shared MATRIX_NOTIFY_USERS list, even though the function's own docblock clearly intends to protect non-public tickets from that list — the redaction is only half-applied (body redacted, title and recipient list not).
Fix: For non-public tickets, exclude the shared notifyUsers() list from $allNotify (only notify actual watchers/participants who already have access) and redact the title the same way the preview already is.
**Severity:** Medium
`helpers/NotificationHelper.php::notifyWatchers()` (~lines 234, 239) — `$allNotify = array_unique(array_merge($matrixIds, self::notifyUsers()))` runs unconditionally regardless of `$visibility`, and the `title` field is never redacted, only `extraData['preview']`.
**Impact:** A status-change/comment-added notification for a confidential ticket with watchers still broadcasts that ticket's title to the shared `MATRIX_NOTIFY_USERS` list, even though the function's own docblock clearly intends to protect non-public tickets from that list — the redaction is only half-applied (body redacted, title and recipient list not).
**Fix:** For non-public tickets, exclude the shared `notifyUsers()` list from `$allNotify` (only notify actual watchers/participants who already have access) and redact the title the same way the preview already is.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Severity: Medium
helpers/NotificationHelper.php::notifyWatchers()(~lines 234, 239) —$allNotify = array_unique(array_merge($matrixIds, self::notifyUsers()))runs unconditionally regardless of$visibility, and thetitlefield is never redacted, onlyextraData['preview'].Impact: A status-change/comment-added notification for a confidential ticket with watchers still broadcasts that ticket's title to the shared
MATRIX_NOTIFY_USERSlist, even though the function's own docblock clearly intends to protect non-public tickets from that list — the redaction is only half-applied (body redacted, title and recipient list not).Fix: For non-public tickets, exclude the shared
notifyUsers()list from$allNotify(only notify actual watchers/participants who already have access) and redact the title the same way the preview already is.