修复潜在BUG

This commit is contained in:
user123456
2025-06-13 08:46:24 +08:00
parent 80b3f8959f
commit 03b3c565b9

View File

@@ -103,14 +103,13 @@ func (is *ImageStreamer) getImageDescriptor(ref name.Reference, options []remote
if reference != "" { if reference != "" {
cacheKey := buildManifestCacheKey(ref.Context().String(), reference) cacheKey := buildManifestCacheKey(ref.Context().String(), reference)
if cachedItem := globalCache.Get(cacheKey); cachedItem != nil { if cachedItem := globalCache.Get(cacheKey); cachedItem != nil {
desc := &remote.Descriptor{ desc := &remote.Descriptor{
Manifest: cachedItem.Data, Manifest: cachedItem.Data,
MediaType: types.MediaType(cachedItem.ContentType),
}
log.Printf("使用缓存的manifest: %s", ref.String())
return desc, nil
} }
log.Printf("使用缓存的manifest: %s", ref.String())
return desc, nil
}
} }
} }
@@ -278,45 +277,51 @@ func (is *ImageStreamer) streamDockerFormat(ctx context.Context, tarWriter *tar.
default: default:
} }
digest, err := layer.Digest() if err := func() error { // ✅ 匿名函数确保资源立即释放
if err != nil { digest, err := layer.Digest()
return err if err != nil {
} return err
layerDigests[i] = digest.String() }
layerDigests[i] = digest.String()
layerDir := digest.String() layerDir := digest.String()
layerHeader := &tar.Header{ layerHeader := &tar.Header{
Name: layerDir + "/", Name: layerDir + "/",
Typeflag: tar.TypeDir, Typeflag: tar.TypeDir,
Mode: 0755, Mode: 0755,
} }
if err := tarWriter.WriteHeader(layerHeader); err != nil { if err := tarWriter.WriteHeader(layerHeader); err != nil {
return err return err
} }
layerReader, err := layer.Uncompressed() layerReader, err := layer.Uncompressed()
if err != nil { if err != nil {
return err return err
} }
defer layerReader.Close() defer layerReader.Close() // ✅ 函数结束立即释放
size, err := layer.Size() size, err := layer.Size()
if err != nil { if err != nil {
return err return err
} }
layerTarHeader := &tar.Header{ layerTarHeader := &tar.Header{
Name: layerDir + "/layer.tar", Name: layerDir + "/layer.tar",
Size: size, Size: size,
Mode: 0644, Mode: 0644,
} }
if err := tarWriter.WriteHeader(layerTarHeader); err != nil { if err := tarWriter.WriteHeader(layerTarHeader); err != nil {
return err return err
} }
if _, err := io.Copy(tarWriter, layerReader); err != nil { if _, err := io.Copy(tarWriter, layerReader); err != nil {
return err
}
return nil
}(); err != nil {
return err return err
} }
@@ -394,7 +399,7 @@ func handleDirectImageDownload(c *gin.Context) {
imageRef := strings.ReplaceAll(imageParam, "_", "/") imageRef := strings.ReplaceAll(imageParam, "_", "/")
platform := c.Query("platform") platform := c.Query("platform")
tag := c.DefaultQuery("tag") tag := c.DefaultQuery("tag", "")
if tag != "" && !strings.Contains(imageRef, ":") && !strings.Contains(imageRef, "@") { if tag != "" && !strings.Contains(imageRef, ":") && !strings.Contains(imageRef, "@") {
imageRef = imageRef + ":" + tag imageRef = imageRef + ":" + tag