diff options
| author | 2025-12-01 15:43:38 +0100 | |
|---|---|---|
| committer | 2026-01-22 13:26:46 +0100 | |
| commit | 2e697a7f989ef95c9be544928a61d4650b4ae337 (patch) | |
| tree | facebdf7e899927ae95853586d18171365ba298a /internal/filter | |
| parent | [bugfix] potential race condition on status unboost (#4596) (diff) | |
| download | gotosocial-2e697a7f989ef95c9be544928a61d4650b4ae337.tar.xz | |
[bugfix] don't apply visibility / status filtering when requesting your own account statuses (#4597)
# Description
This updates our account statuses function to only apply filtering when requesting accounts other than your own. This should prevent confusing situations like https://codeberg.org/superseriousbusiness/gotosocial/issues/4594 occurring.
## Checklist
- [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md).
- [x] I/we have not used so-called 'AI' to create the proposed changes.
- [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat.
- [x] I/we have performed a self-review of added code.
- [x] I/we have written code that is legible and maintainable by others.
- [x] I/we have commented the added code, particularly in hard-to-understand areas.
- [ ] I/we have made any necessary changes to documentation.
- [ ] I/we have added tests that cover new code.
- [x] I/we have run tests and they pass locally with the changes.
- [x] I/we have run `go fmt ./...` and `golangci-lint run`.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4597
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'internal/filter')
| -rw-r--r-- | internal/filter/mutes/status.go | 6 | ||||
| -rw-r--r-- | internal/filter/status/status.go | 6 | ||||
| -rw-r--r-- | internal/filter/visibility/status.go | 14 |
3 files changed, 19 insertions, 7 deletions
diff --git a/internal/filter/mutes/status.go b/internal/filter/mutes/status.go index befe07e88..b0cdc3400 100644 --- a/internal/filter/mutes/status.go +++ b/internal/filter/mutes/status.go @@ -165,6 +165,12 @@ func (f *Filter) getStatusMuteDetails( next = inReplyTo } + // If requester is owner of the status, + // don't mark it as muted (hidden) to them. + if requester.ID == status.AccountID { + details.mute = false + } + return details, nil } diff --git a/internal/filter/status/status.go b/internal/filter/status/status.go index 572f669d5..d2d18fa21 100644 --- a/internal/filter/status/status.go +++ b/internal/filter/status/status.go @@ -160,6 +160,12 @@ func (f *Filter) getStatusFilterResults( return results, nil } + // Shortcut to check up-front for owner + // of their own status, i.e. no filtering. + if status.AccountID == requester.ID { + return results, nil + } + // Check if status is boost. if status.BoostOfID != "" { if status.BoostOf == nil { diff --git a/internal/filter/visibility/status.go b/internal/filter/visibility/status.go index c46fd369c..f5c236437 100644 --- a/internal/filter/visibility/status.go +++ b/internal/filter/visibility/status.go @@ -96,6 +96,11 @@ func (f *Filter) isStatusVisible( return false, gtserror.Newf("error populating status %s: %w", status.ID, err) } + // Shortcut to check up-front for owner of their own status. + if requester != nil && status.AccountID == requester.ID { + return true, nil + } + // Check whether status accounts are visible to the requester. acctsVisible, err := f.areStatusAccountsVisible(ctx, requester, status) if err != nil { @@ -113,8 +118,8 @@ func (f *Filter) isStatusVisible( } if requester == nil { - // Use a different visibility - // heuristic for unauthed requests. + // Use different visibility heuristics + // when dealing with unauthed requests. return f.isStatusVisibleUnauthed(status), nil } @@ -140,11 +145,6 @@ func (f *Filter) isStatusVisible( is of visibility followers-only or below. */ - if requester.ID == status.AccountID { - // Author can always see their own status. - return true, nil - } - if status.MentionsAccount(requester.ID) { // Status mentions the requesting account. return true, nil |
