GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Match denylist entries the way each ecosystem spells names by simonchrz · Pull Request #555 · git-pkgs/proxy

Conversation

@simonchrz

@simonchrz simonchrz commented Oct 22, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Denylist entries were compared as plain PURL strings, while handlers build PURLs from download URLs that spell packages differently. Some denied versions were still served:

  • PyPI: . vs -/_ (wheel filenames always use _)
  • NuGet: entries with capitals never matched the lowercased ids
  • RubyGems: platform gems such as nokogiri-1.16.0-x86_64-linux.gem
  • conda: the handler's channel/name never matched a plain entry, and qualifiers were rejected

Entries and checked PURLs now go through one comparison form in internal/denylist. Handlers, cache keys and DB rows are unchanged. A conda entry matches every channel unless it has a channel qualifier. The docs list how each ecosystem is matched and drop the claim that PyPI separators were already handled.

A second commit covers more spellings: Composer's leading v, OCI repositories written as a path (manifests are now checked by tag and digest too), Swift registry packages in either form and when streaming, Go versions with escaped uppercase letters, and gems with a dash followed by a digit in their name. Gems like devise-2fa were parsed with the wrong name and version, so their cached copies are fetched again once.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
simonchrz added 2 commits October 22, 2026 20:46
@simonchrz
Match denylist entries the way each ecosystem spells names
20c8878
Denylist entries were compared as plain PURL strings, but handlers build
PURLs from download URLs that spell packages differently, so some denied
versions were still served. Entries and checked PURLs now go through one
per-ecosystem comparison form: PyPI names follow PEP 503 (case and runs of
-, _ and . are equivalent), NuGet ids and versions ignore case, a gem
version also matches its platform builds, and a conda entry matches the
package in every channel unless it carries a channel qualifier. Cache keys
are unchanged.
@simonchrz
Match more denylist spellings
e1650e2
Denylist entries now also match Composer versions with Packagist's
leading v, OCI repositories written as a path, Swift registry packages
in either form (also when streaming), Go versions with escaped uppercase
letters, and gems whose names contain a dash followed by a digit. OCI
manifests are checked by tag and digest, and denied blobs and Swift
archives answer 403 instead of 500 or 502.
andrew
andrew approved these changes Oct 23, 2026
View reviewed changes
@andrew
andrew merged commit 1bd5cfc into git-pkgs:main Oct 23, 2026
6 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@simonchrz simonchrz mentioned this pull request Oct 23, 2026
Move per-ecosystem name normalisation into git-pkgs/purl #563
Closed
@simonchrz simonchrz added the breaking Changes behaviour users rely on; needs a minor release label Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@andrew andrew andrew approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

breaking Changes behaviour users rely on; needs a minor release

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@simonchrz @andrew
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.