fix(sync): prevent nil pointer dereference when existing progress is missing
In applyProgressResolution and applyResolution, currentPage and totalPages were unconditionally read from existingProgress even when the preceding query returned err (no rows). This caused a nil pointer dereference when no existing reading progress existed for a media item. Now declare the variables as zero-value pgtype.Int4 and only populate them from existingProgress when err is nil.
This commit is contained in:
1 parent
3e73a582ba
commit
18811cea1b
1 file changed
+12
-4
@@ -316,8 +316,12 @@ func (h *ConflictHandler) applyProgressResolution(mediaItemID pgtype.UUID, userI
|
|||||||
characterOffset = pgtype.Int8{Int64: int64(c), Valid: true}
|
characterOffset = pgtype.Int8{Int64: int64(c), Valid: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPage := existingProgress.CurrentPage
|
var currentPage pgtype.Int4
|
||||||
totalPages := existingProgress.TotalPages
|
var totalPages pgtype.Int4
|
||||||
|
if err == nil {
|
||||||
|
currentPage = existingProgress.CurrentPage
|
||||||
|
totalPages = existingProgress.TotalPages
|
||||||
|
}
|
||||||
|
|
||||||
if p, ok := data["page"].(float64); ok {
|
if p, ok := data["page"].(float64); ok {
|
||||||
currentPage = pgtype.Int4{Int32: int32(p), Valid: true}
|
currentPage = pgtype.Int4{Int32: int32(p), Valid: true}
|
||||||
@@ -661,8 +665,12 @@ func (h *ConflictHandler) applyResolution(mediaItemID pgtype.UUID, userID pgtype
|
|||||||
characterOffset = pgtype.Int8{Int64: int64(c), Valid: true}
|
characterOffset = pgtype.Int8{Int64: int64(c), Valid: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPage := existingProgress.CurrentPage
|
var currentPage pgtype.Int4
|
||||||
totalPages := existingProgress.TotalPages
|
var totalPages pgtype.Int4
|
||||||
|
if err == nil {
|
||||||
|
currentPage = existingProgress.CurrentPage
|
||||||
|
totalPages = existingProgress.TotalPages
|
||||||
|
}
|
||||||
|
|
||||||
if p, ok := data["page"].(float64); ok {
|
if p, ok := data["page"].(float64); ok {
|
||||||
currentPage = pgtype.Int4{Int32: int32(p), Valid: true}
|
currentPage = pgtype.Int4{Int32: int32(p), Valid: true}
|
||||||
|
|||||||
Reference in new issue
Block a user