summaryrefslogtreecommitdiff
path: root/internal/processing/status/boost.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-06-10 18:42:41 +0000
committerLibravatar GitHub <noreply@github.com>2024-06-10 19:42:41 +0100
commitfd6637df4aeed721442bff6dfbce9bdd1b5ac7b8 (patch)
tree8d4ddffdd8742b3cd7aa0be5e26ea235e76b127d /internal/processing/status/boost.go
parent[chore] Roll back use of `(created)` pseudo-header pending #2991 (#2992) (diff)
downloadgotosocial-fd6637df4aeed721442bff6dfbce9bdd1b5ac7b8.tar.xz
[bugfix] boost and account recursion (#2982)
* fix possible infinite recursion if moved accounts are self-referential * adds a defensive check for a boost being a boost of a boost wrapper * add checks on input for a boost of a boost * remove unnecessary check * add protections on account move to prevent move recursion loops * separate status conversion without boost logic into separate function to remove risk of recursion * move boost check to boost function itself * formatting * use error 422 instead of 500 * use gtserror not standard errors package for error creation
Diffstat (limited to 'internal/processing/status/boost.go')
-rw-r--r--internal/processing/status/boost.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/internal/processing/status/boost.go b/internal/processing/status/boost.go
index 1c1da4ca7..1b410bb0a 100644
--- a/internal/processing/status/boost.go
+++ b/internal/processing/status/boost.go
@@ -49,6 +49,7 @@ func (p *Processor) BoostCreate(
return nil, errWithCode
}
+ // Unwrap target in case it is a boost.
target, errWithCode = p.c.UnwrapIfBoost(
ctx,
requester,
@@ -58,7 +59,13 @@ func (p *Processor) BoostCreate(
return nil, errWithCode
}
- // Ensure valid boost target.
+ // Check is viable target.
+ if target.BoostOfID != "" {
+ err := gtserror.Newf("target status %s is boost wrapper", target.URI)
+ return nil, gtserror.NewErrorUnprocessableEntity(err)
+ }
+
+ // Ensure valid boost target for requester.
boostable, err := p.filter.StatusBoostable(ctx,
requester,
target,