Files
bun.sh/src
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
..
2025-07-21 13:26:47 -07:00
2025-09-09 20:41:10 -07:00
2025-10-14 17:43:38 -07:00
2025-10-16 21:52:22 -04:00
2025-07-21 13:26:47 -07:00
2025-10-04 02:17:55 -07:00
2025-07-29 19:35:46 -07:00
2025-09-30 05:26:32 -07:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00
2025-09-09 20:41:10 -07:00
2025-10-06 05:39:22 -07:00
2025-09-11 23:29:53 -07:00
2025-07-21 13:26:47 -07:00
2025-10-03 17:13:22 -07:00
2025-07-21 13:26:47 -07:00
2025-09-09 20:41:10 -07:00
2025-07-21 13:26:47 -07:00
2025-10-11 08:23:25 -07:00
2025-07-21 13:26:47 -07:00
2025-02-01 01:11:02 -08:00
2025-07-21 13:26:47 -07:00
2025-07-21 13:26:47 -07:00