fix possible nil pointer deref on empty avatar/banners

This commit is contained in:
ari melody 2025-06-23 12:58:15 +01:00
parent 49324a64b1
commit bb0066036c
Signed by: ari
GPG key ID: CF99829C92678188
2 changed files with 20 additions and 12 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
.DS_Store
.obsidian

View file

@ -34,6 +34,9 @@ func ImportProfile(fromSession *AtprotoSession, toSession *AtprotoSession, dryru
}
profile := BskyActorProfile{}
err = json.Unmarshal(getProfileResponse.Value, &profile)
if err != nil {
return errors.New(fmt.Sprintf("failed to parse source profile data: %v\n", err))
}
newProfile := BskyActorProfile{
LexiconTypeID: "app.bsky.actor.profile",
@ -53,21 +56,25 @@ func ImportProfile(fromSession *AtprotoSession, toSession *AtprotoSession, dryru
}
if !dryrun {
// import avatar
avatarBytes, err := GetAtprotoBlob(fromSession.PdsUrl, fromSession.Did, profile.Avatar.Ref.Link)
if err != nil { return errors.New(fmt.Sprintf("failed to download avatar: %v\n", err)) }
if profile.Avatar != nil {
// import avatar
avatarBytes, err := GetAtprotoBlob(fromSession.PdsUrl, fromSession.Did, profile.Avatar.Ref.Link)
if err != nil { return errors.New(fmt.Sprintf("failed to download avatar: %v\n", err)) }
avatarBlob, err := UploadAtprotoBlob(toSession, avatarBytes, profile.Avatar.MimeType)
if err != nil { return errors.New(fmt.Sprintf("failed to upload avatar: %v\n", err)) }
newProfile.Avatar = avatarBlob
avatarBlob, err := UploadAtprotoBlob(toSession, avatarBytes, profile.Avatar.MimeType)
if err != nil { return errors.New(fmt.Sprintf("failed to upload avatar: %v\n", err)) }
newProfile.Avatar = avatarBlob
}
// import banner
bannerBytes, err := GetAtprotoBlob(fromSession.PdsUrl, fromSession.Did, profile.Banner.Ref.Link)
if err != nil { return errors.New(fmt.Sprintf("failed to download banner: %v\n", err)) }
if profile.Banner != nil {
// import banner
bannerBytes, err := GetAtprotoBlob(fromSession.PdsUrl, fromSession.Did, profile.Banner.Ref.Link)
if err != nil { return errors.New(fmt.Sprintf("failed to download banner: %v\n", err)) }
bannerBlob, err := UploadAtprotoBlob(toSession, bannerBytes, profile.Banner.MimeType)
if err != nil { return errors.New(fmt.Sprintf("failed to upload banner: %v\n", err)) }
newProfile.Banner = bannerBlob
bannerBlob, err := UploadAtprotoBlob(toSession, bannerBytes, profile.Banner.MimeType)
if err != nil { return errors.New(fmt.Sprintf("failed to upload banner: %v\n", err)) }
newProfile.Banner = bannerBlob
}
// import all details
_, err = PutAtprotoRecord(toSession, "app.bsky.actor.profile", newProfile)