Files
bun.sh/test/js/web/html
robobun 6ee9dac50f Fix URLSearchParams.toJSON() assertion failure with numeric string keys (#23785)
## Summary

Fixes an assertion failure that occurred when `URLSearchParams.toJSON()`
was called with numeric string keys.

## The Problem

When using numeric string keys (e.g., `"39208"`, `"0"`, `"100"`),
calling `toJSON()` would trigger:
```
ASSERTION FAILED: !parseIndex(propertyName)
cache/webkit-6d0f3aac0b817cc0/include/JavaScriptCore/JSObjectInlines.h:444
```

Reproduction:
```javascript
const params = new URLSearchParams();
params.set("39208", "updated");
params.toJSON(); // crashes
```

## Root Cause

The `getInternalProperties` function in `JSURLSearchParams.cpp` was
using `putDirect()` to add properties to the result object. However,
`putDirect()` cannot be used with property names that can be parsed as
array indices - JSC expects such properties to use indexed storage
instead.

## The Fix

- Replace `putDirect()` with `putDirectMayBeIndex()`, which
automatically handles both regular properties and numeric indices
- Replace `getDirect()` with `get()` to properly retrieve values for
both types of properties

## Test Plan

Added comprehensive tests to `test/js/web/html/URLSearchParams.test.ts`:
-  Single numeric string keys
-  Multiple numeric keys
-  Mixed numeric and non-numeric keys  
-  Duplicate numeric keys
-  Extra arguments (original crash case)

All tests pass, and the original crash no longer occurs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-10-18 16:48:51 -07:00
..
2023-03-07 12:22:34 -08:00
2025-07-14 14:18:18 -07:00