commit 7bea1076086418198280a66e35b55277edc90ee6
parent 82061b1202a81cef0bb4874e6a093cda56822f02
Author: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>
Date: Mon, 26 Sep 2022 09:14:36 +0100
[bugfix] add so, many, nil, checks (#853)
* add so, many, nil, checks.
* remove comment
Diffstat:
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go
@@ -208,27 +208,39 @@ stackLoop:
// Look for an attached status replies (as collection)
replies := current.statusable.GetActivityStreamsReplies()
- if replies == nil || !replies.IsActivityStreamsCollection() {
+ if replies == nil {
continue stackLoop
}
// Get the status replies collection
collection := replies.GetActivityStreamsCollection()
+ if collection == nil {
+ continue stackLoop
+ }
// Get the "first" property of the replies collection
first := collection.GetActivityStreamsFirst()
- if first == nil || !first.IsActivityStreamsCollectionPage() {
+ if first == nil {
continue stackLoop
}
// Set the first activity stream collection page
current.page = first.GetActivityStreamsCollectionPage()
+ if current.page == nil {
+ continue stackLoop
+ }
}
- for /* page loop */ {
+ pageLoop:
+ for {
if current.itemIter == nil {
- // Check this page contains any items...
+ // Get the items associated with this page
items := current.page.GetActivityStreamsItems()
+ if items == nil {
+ continue stackLoop
+ }
+
+ // Check this page contains any items...
if current.iterLen = items.Len(); current.iterLen == 0 {
continue stackLoop
}
@@ -245,15 +257,12 @@ stackLoop:
// Get next item iterator object
current.itemIter = current.itemIter.Next()
- switch {
- // Item is already an IRI
- case current.itemIter.IsIRI():
- itemIRI = current.itemIter.GetIRI()
-
- // Item is a note, get the note ID IRI
- case current.itemIter.IsActivityStreamsNote():
- note := current.itemIter.GetActivityStreamsNote()
- if id := note.GetJSONLDId(); id != nil && id.IsIRI() {
+ if iri := current.itemIter.GetIRI(); iri != nil {
+ // Item is already an IRI type
+ itemIRI = iri
+ } else if note := current.itemIter.GetActivityStreamsNote(); note != nil {
+ // Item is a note, fetch the note ID IRI
+ if id := note.GetJSONLDId(); id != nil {
itemIRI = id.GetIRI()
}
}
@@ -297,12 +306,15 @@ stackLoop:
// Get the current page's "next" property
pageNext := current.page.GetActivityStreamsNext()
- if pageNext == nil || !pageNext.IsIRI() {
+ if pageNext == nil {
continue stackLoop
}
// Get the "next" page property IRI
pageNextIRI := pageNext.GetIRI()
+ if pageNextIRI == nil {
+ continue stackLoop
+ }
// Dereference this next collection page by its IRI
collectionPage, err := d.DereferenceCollectionPage(ctx, username, pageNextIRI)
@@ -313,6 +325,7 @@ stackLoop:
// Set the updated collection page
current.page = collectionPage
+ continue pageLoop
}
}