Skip to content

Commit

Permalink
[bugfix] add so, many, nil, checks (#853)
Browse files Browse the repository at this point in the history
* add so, many, nil, checks.

* remove comment
  • Loading branch information
NyaaaWhatsUpDoc authored Sep 26, 2022
1 parent 82061b1 commit 7bea107
Showing 1 changed file with 27 additions and 14 deletions.
41 changes: 27 additions & 14 deletions internal/federation/dereferencing/thread.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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()
}
}
Expand Down Expand Up @@ -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)
Expand All @@ -313,6 +325,7 @@ stackLoop:

// Set the updated collection page
current.page = collectionPage
continue pageLoop
}
}

Expand Down

0 comments on commit 7bea107

Please sign in to comment.