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

  1. Retry the request; transient transport anomalies usually clear.
  2. Switch to the stable channel to bypass the GitHub manifest download entirely.
  3. 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

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


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/0d3486ab49a54ab3. Report an issue: GitHub.