Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

S3 HEAD/GET overwrite case-insensitive user metadata collisions

Open Beginner friendly
#1,461 0 comments 0 reactions 1 assignee View on GitHub

Maintainers usually reply within 1 day

@ferhatelmas is already working on this.

Since Oct 7, 2026.

  • #1462 by @hsusul — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
82/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
aws, typescript
Domain
api, backend

Research direction

Start with the toAwsMetadataHeaders mapper and its dbHeadObject and getObject entry points, then inspect the deterministic AWS SDK response-deserializer regression setup described in the issue. Done means case-distinct metadata keys produce a comma-delimited combined value without breaking existing header validation or missing-meta accounting.

Written by the indexing model from the issue text.

Description

Bug report

S3 HEAD and GET silently discard user-metadata values when a Storage object has case-distinct JSON keys with the same case-insensitive header name.

Reproduction
  1. Upload an object through the ordinary Storage API with user metadata {"Title":"first","title":"second"} (the x-metadata header contains its base64-encoded JSON).
  2. Read it through S3 HeadObject or GetObject.

The AWS SDK returns Metadata: { title: "second" }, with no MissingMeta indication. The first value is lost in the response even though both entries are valid strings.

Expected: Metadata: { title: "first,second" }. Amazon S3 documents that REST metadata retrieval combines same-name headers, ignoring case, into a comma-delimited list.

Cause and local proof

On current master 76b70ba80e7c171d6b534db3c65430467a82f4bd, toAwsMetadataHeaders lowercases each name and overwrites the previous value. Both dbHeadObject and getObject use this mapper.

A deterministic regression using the actual AWS SDK response deserializer and production mapper fails on this revision (expected "first,second", received "second") and passes when valid colliding values are combined. The test uses in-memory database/backend boundaries, dummy SDK credentials, and no network or running services. Existing header validation and x-amz-missing-meta accounting can remain intact, including the limit on the combined header value.

Dominant language
TypeScript
Stars
1.3k
Forks
314
Avg merge
1d 12h
Merged PRs (30d)
89

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from supabase/storage

All issues in supabase/storage

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.