Files
AnyPS5/docs/dev/debt/libSceJsc.md
T
Adrià fb99c4fd97 Merge pull request #12442 from simnJS/feat/jsc-string-edge-answers
feat(libSceJsc): answer the JSString null and length cases as JavaScriptCore does
2026-10-29 14:28:54 +01:00

2.5 KiB

libSceJsc technical debt

Unknown function info

  • JSString ABI and ownership: the console JavaScriptCore version, allocation policy, opaque object layout and thread initialization remain unverified. These host objects cannot be passed to a title-supplied native JavaScriptCore module. The ten names occur in the PS5 3.20 inventory; ownership and signatures follow pinned WebKit JSStringRef.cpp. A null handle given to retain, release or the maximum-size query, a UTF-8 input above INT32_MAX bytes and a UTF-16 length above 2147483635, given or decoded from non-ASCII UTF-8, throw where WebKit faults. Other JavaScriptCore APIs remain unavailable.

Functional

  • JSString conversion: console behavior is unverified. UTF-16 storage, null/empty distinction and partial UTF-8 output follow pinned WebKit OpaqueJSString.cpp and UTF8Conversion.cpp. Malformed UTF-8 creates a null string, distinct from an empty string; output stops before an unpaired UTF-16 surrogate. The PS5 11.x OpaqueJSString.h keeps the low 32 bits of a UTF-16 length of 2^32 or more, which throws here as in pinned WebKit.

Known export names; ABI prototypes unverified

  • The 150 throwing JavaScriptCore, Inspector, WTF and bmalloc exports in Export.cpp are present in the PS5 3.20 libSceJsc export inventory from PS5-3.20_Libs. Each is named after the symbol the verified NID name database gives for its NID, and the NID of that name matches. Prototypes and behavior are unverified; each uses the no-parameter import-resolution convention and throws through NotImplemented_nid_no_patch. These declarations make no ABI or behavior claim.