From 7bea1076086418198280a66e35b55277edc90ee6 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Mon, 26 Sep 2022 09:14:36 +0100 Subject: [PATCH] [bugfix] add so, many, nil, checks (#853) * add so, many, nil, checks. * remove comment --- internal/federation/dereferencing/thread.go | 41 ++++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go index 7626454a6..c0a758ee3 100644 --- a/internal/federation/dereferencing/thread.go +++ b/internal/federation/dereferencing/thread.go @@ -208,27 +208,39 @@ type frame struct { // 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 @@ type frame struct { // 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 @@ type frame struct { // 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 @@ type frame struct { // Set the updated collection page current.page = collectionPage + continue pageLoop } }