siyuan-note/siyuan · error
checksum manifest response is empty
Error message
checksum manifest response is empty
What it means
Returned by getGitHubManifestChecksum when the HTTP GET for the manifest asset's BrowserDownloadURL succeeds without transport error but the response object or its underlying response.Response is nil. This is a defensive null-check on the httpclient wrapper's response shape — a non-nil error but unusable response.
Source
Thrown at kernel/model/updater_release.go:388
if "" != manifestDigest {
manifestCacheKey = manifestAsset.BrowserDownloadURL + "#" + manifestDigest
}
if "" != manifestCacheKey {
cached, ok := githubManifestCache.Load(manifestCacheKey)
if ok {
if checksum := parseChecksumManifest(cached.(string), pkgName); "" != checksum {
return checksum, nil
}
return "", errors.New("package checksum is unavailable")
}
}
response, err := httpclient.NewCloudRequest30s().SetContext(ctx).Get(manifestAsset.BrowserDownloadURL)
if err != nil {
return "", err
}
if nil == response || nil == response.Response {
return "", errors.New("checksum manifest response is empty")
}
defer response.Body.Close()
if 200 != response.StatusCode {
return "", fmt.Errorf("get checksum manifest failed: %d", response.StatusCode)
}
data, err := io.ReadAll(io.LimitReader(response.Body, maxChecksumManifestSize+1))
if err != nil {
return "", err
}
if maxChecksumManifestSize < int64(len(data)) {
return "", errors.New("checksum manifest is too large")
}
if "" != manifestDigest {
actualDigest := fmt.Sprintf("%x", sha256.Sum256(data))
if manifestDigest != actualDigest {
return "", errors.New("checksum manifest digest mismatch")
}
}View on GitHub (pinned to 251596fc0d)
Solutions
- Retry the request; transient transport anomalies usually clear.
- Switch to the stable channel to bypass the GitHub manifest download entirely.
- If reproducible, inspect the httpclient configuration and any registered transport interceptors.
Defensive patterns
Strategy: retry
Try / catch
// Retry once on a nil-response transport anomaly.
checksum, err := getGitHubManifestChecksum(ctx, release, pkgName)
if err != nil && strings.Contains(err.Error(), "response is empty") {
time.Sleep(5 * time.Second)
checksum, err = getGitHubManifestChecksum(ctx, release, pkgName)
} Prevention
- Treat a nil response as a transient transport glitch and retry.
- Switch to the stable channel if GitHub asset downloads are systematically broken.
- Inspect httpclient transport configuration if this recurs.
When it happens
Trigger: The httpclient wrapper (NewCloudRequest30s) returned a non-nil response envelope whose inner *http.Response is nil, which can happen with certain transport/redirect edge cases or a custom interceptor that short-circuits. Extremely rare in normal operation.
Common situations: A misconfigured custom HTTP transport or proxy plugin injected into httpclient. An httpclient version regression. A redirect loop that the client resolved to an empty response.
Related errors
- get checksum manifest failed: %d
- checksum manifest is too large
- update package is unavailable: [%s] checksum is unavailable
- checksum manifest is unavailable
- package checksum is unavailable
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/0d3486ab49a54ab3.
Report an issue: GitHub.