Skip to content

Multipart package publish leaves Convex blobs after a failed publish #3673

Description

@SebTardif

Summary

Authenticated multipart package publish stores the ClawPack tarball and extracted files (or loose uploaded files) before publishPackageImpl validates name, version, account age, and owner. Handler catch maps those failures to HTTP 400 and does not delete the new storage ids.

This is a source-level resource leak. I did not run a live production package publish.

Verification / reproduction

  1. Read convex/httpApiV1/packagesV1.ts parseMultipartPackagePublish / publishPackageV1Handler.
  2. Follow ClawPack store, extracted-file store, and loose-file storeUploadedPackageFile.
  3. Confirm the HTTP 400 catch does not storage.delete those ids.

Actual

  • A rejected package publish can leave tarball, extracted files, and artifact blobs unreferenced.

Expected

  • Request-local stored ids (files plus artifact) are deleted if parse or publishPackageImpl fails before a release owns them.
  • Reused staged tarballs that already belong to another attempt are not deleted by request-local cleanup.
  • Successful publishes retain their blobs.

Evidence

Source: convex/httpApiV1/packagesV1.ts. Proposed patch: PR #3613.

Sibling: #3549 is skill multipart only.

Security / privacy

Authenticated publisher storage leak. Not a claimed unauthenticated vuln.

Acceptance criteria

  • Failed multipart package publish deletes request-local stored ids.
  • Reused staged tarballs are excluded from that cleanup.
  • Blobs owned by a committed release are not deleted.
  • Successful publish still retains files and artifact.

This tracker stays open if PR #3613 is closed without landing on main.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal backlog priority with limited blast radius.clawsweeper:bulk-filedClawSweeper detected a high recent issue-filing volume from this author.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions