• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

thomaspoignant / scim-patch / 28115727548
99%

Build:
DEFAULT BRANCH: master
Ran 24 Jun 2026 05:04PM UTC
Jobs 1
Files 2
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

24 Jun 2026 05:04PM UTC coverage: 99.405% (+0.009%) from 99.396%
28115727548

push

github

web-flow
fix: prevent prototype pollution via inherited properties (GHSA-2mhw-wcx5-v3xj) (#1127)

* fix: prevent prototype pollution via inherited properties (GHSA-2mhw-wcx5-v3xj)

The denylist added in GHSA-9m6g-wc8r-q59c only blocked the literal segments
__proto__, constructor, and prototype. Path traversal still followed inherited
properties, so a patch path segment such as `toString` resolved to the shared
Object.prototype.toString built-in and a child key was assigned onto it,
mutating a process-global object.

Two vectors were affected:
  - dotted path:        { op: "add", path: "toString.x", value: "polluted" }
  - no-path value key:  { op: "add", value: { "toString.y": "polluted" } }

navigate() and assign() now treat only own properties as existing
(Object.prototype.hasOwnProperty.call), so an inherited key is handled as a
missing attribute: a fresh own container is created on the resource (shadowing
the built-in on that instance only) and the shared built-in is never touched.
navigate() keeps the original "||" semantics for own keys so a falsy own
intermediate (e.g. a null attribute, issue #186) is still replaced with a
container. The existing denylist is retained as defense in depth.

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: ignore .gstack/ and .context/ workspace dirs

* test: assert patched value lands on resource's own property

The prototype-pollution regression cases only asserted the negative (the shared
built-in stays clean). Add a positive assertion that the value is routed to the
resource's own property so the tests cannot pass on a silent no-op.

* test: use chai's .to.be.undefined assertion (SonarCloud S5906)

Prefer the specific .to.be.undefined property assertion over the generic
.to.equal(undefined), matching the style already used in scimPatch.test.ts.

---------

Co-authored-by: Claude <noreply@anthropic.com>

108 of 109 branches covered (99.08%)

Branch coverage included in aggregate %.

4 of 4 new or added lines in 1 file covered. (100.0%)

226 of 227 relevant lines covered (99.56%)

25.46 hits per line

Jobs
ID Job ID Ran Files Coverage
1 28115727548.1 24 Jun 2026 05:04PM UTC 2
99.4
GitHub Action Run
Source Files on build 28115727548
  • Tree
  • List 2
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28115727548
  • c86474f7 on github
  • Prev Build on master (#28115243243)
  • Next Build on master (#28116036316)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc