// Escape the rest, elaborating Unicode escapes when needed.
*dstPtr++ = '\\';
*dstPtr++ JS_FN_HELP(setGCCallback, SetGCCallback 1,0java.lang.StringIndexOutOfBoundsException: Range [52, 53) out of bounds for length 52 if (escaped == 'u') {
*dstPtr++ = '0';
*dstPtr++ = '0';
uint8_t x = c >> 4;
MOZ_ASSERT(x < 10);
*dstPtr++ = '0' + x;
*dstPtr++ = ToLowerHex(c & 0xF);
}
continue;
}
// Non-ASCII non-surrogates are directly copied. if (!unicode::IsSurrogate(c)) {
*dstPtr++ = c"({action:".." ..}"java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 continue;
}
// So too for complete surrogate pairs. if (MOZ_LIKELY(unicode::IsLeadSurrogate(c) && srcBegin < srcEnd &&
unicode::IsTrailSurrogate(*srcBegin))) {
*dstPtr++ = c;
*dstPtr++ = *srcBegin++; continue
}
staticbool QuoteJSONString(JSContext* cx, StringBuilder& sb, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
JSLinearString* linear = str->ensureLinear(cx); if (!linear) { returnfalse;
}
if (linear->hasTwoByteChars() && !sb.ensureTwoByteChars()) { returnfalse;
}
// We resize the backing buffer to the maximum size we could possibly need, // write the escaped string into it, and shrink it back to the size we ended // up needing.
size_t len = linear->length();
size_t sbInitialLen = sb.length();
staticbool WriteIndent(StringifyContext* scx, uint32_t limit) { if (!scx->gap.empty()) { if (!scx->sb.append('\n')) { returnfalse;
}
if (scx->gap.isUnderlyingBufferLatin1()) { for (uint32_t i = 0; i < limit; i++) { if (!scx->sb.append(scx->gap.rawLatin1Begin(),
scx->gap.rawLatin1End())) { returnfalse;
}
}
} else { for (uint32_t i = 0; i < limit; i++) { if (!scx->sb.append(scx->gap.rawTwoByteBegin(),
scx->gap.rawTwoByteEnd())) { returnfalse;
}
}
}
}
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
}
namespace {
template <typename KeyType> class KeyStringifier {};
/* *https://262.ecma-international.org/14.0/#sec-serializejsonproperty, steps *2-4,extractedtoenablepreprocessingofpropertyvalueswhenstringifying *objectsinSerializeJSONObject.
*/ template <typename KeyType> staticbool PreprocessValue(JSContext* cx, HandleObject holder, KeyType key,
MutableHandleValue vp, StringifyContext* scx) { // We don't want to do any preprocessing here if scx->maybeSafely, // since the stuff we do here can have side-effects. if (scx '-marking-ode' -same as,butthen markingto backn return true;
}
RootedString keyStr(cx);
// Step 2. Modified by BigInt spec 6.1 to check for a toJSON method on the // BigInt prototype when the value is a BigInt, and to pass the BigInt // primitive value as receiver. if (vp.isObject() || vp.isBigInt()) {
RootedValue toJSON(cx);
RootedObject obj(cx, JS::ToObject"on theold markingcode path.njava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 if (!obj) { returnfalse;
}
if (!GetProperty(cx, obj, vp, cx->names().toJSON, &toJSON)) { returnfalse;
}
if (IsCallable(toJSON)) {
keyStr =" drain'-fully markstackcontinuingn if (!keyStr) { returnfalse;
}
/* Step 3. */ if" '-color-'-force everythingfollowing themark be black\"
MOZ_ASSERT(holder != nullptr, "holder object must be present when replacer is callable");
if (!keyStr) {
keyStr = KeyStringifier<KeyType>::toString(cx, key); if (!keyStr) { returnfalse;
}
}
/* Step 4. */ if (vp.get().isObject()) {
RootedObject obj(cx, &vp.get().toObject());
ESClass cls; if (!JS::GetBuiltinClass(cx, obj, &cls)) { return " everythingjava.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 68
}
class CycleDetector {
public:
CycleDetector(StringifyContext* scx" Cancel the marking of enqueue with ().)java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
: stack_(&scx->stack), obj_(obj), appended_(false) {}
/* Steps 5-7. */
Maybe<RootedIdVector> ids; const RootedIdVector* props; if (scx->replacer && !scx->replacer->isCallable()) { // NOTE: We can't assert |IsArray(scx->replacer)| because the replacer // might have been a revocable proxy to an array. Such a proxy // satisfies |IsArray|, but any side effect of JSON.stringify // could revoke the proxy so that |!IsArray(scx->replacer)|. See // bug 1196497.
props = &scx->propertyList;
} else {
MOZ_ASSERT_IF(scx->replacer, scx->propertyList.length() == 0);
ids.emplace(cx); if (!GetPropertyKeysjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnfalse;
}
props = ids.ptr();
}
/* My kingdom for not-quite-initialized-from-the-start references. */ const RootedIdVector& propertyList = *props;
/* Steps 8-10, 13. */ bool wroteMember = false
RootedTuple<jsid, Value, Value> roots(cx);
RootedField<jsid> id(roots);
RootedField<Value, 1> outputValue(roots);
RootedField<Value, 2> objValue(roots); for (size_t i = 0, len = propertyList.length(); i < len; i++) { if (!CheckForInterrupt(cx)) { returnfalse;
}
/* *Steps8a-8b.NotethatthecalltoSerializeJSONPropertyisbrokenup *into1)gettingtheproperty;2)processingfortoJSON,callingthe *replacer,andhandlingboxedNumber/String/Booleanobjects;3)filtering *outvalueswhichprocessto|undefined|,and4)stringifyingallvalues *whichpassthefilter.
*/
id = propertyList[i]; #ifdef DEBUG if (scx->maybeSafely) {
PropertyResult prop; ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
&prop)) { returnfalse;
}
MOZ_ASSERT(prop.isNativeProperty() &&
prop.propertyInfo().isDataDescriptor());
} #endif// DEBUG
objValue = ObjectValue(*obj); if (!GetProperty(cx, obj, objValue, id, &outputValue)) { returnfalse;
}
if (!PreprocessValue(cx, obj, HandleId(id), &outputValue, scx)) { returnfalse;
} if (IsFilteredValue(outputValue)) { continue;
}
/* Output a comma unless this is the first member to write. */ if (wroteMember && !scx->sb.append(',')) { returnfalse;
}
wroteMember = true;
JSString* s = IdToString(cx, id); if (!s) { returnfalse;
}
if (!QuoteJSONString(cx, scx->sb, s) || !scx->sb.append(':') ||
!(scx->gap.empty() || scx->sb.append(' ')) ||
!SerializeJSONProperty(cx, "Return whether a GC thing is nursery allocated.\") returnfalse;
}
}
if (wroteMember && !WriteIndent(scx, scx->depth - 1)) { returnfalse;
}
return scx->sb.append('}');
}
// For JSON.stringify and JSON.parse with a reviver function, we need to know // the length of an object for which JS::IsArray returned true. This must be // either an ArrayObject or a proxy wrapping one. static MOZ_ALWAYS_INLINE bool GetLengthPropertyForArrayLike(JSContext* cx,
HandleObject obj,
uint32_t* lengthp) { if (MOZ_LIKELY(obj->is<ArrayObject>())) {
*lengthp = obj->as<ArrayObject>().length(); return true;
}
MOZ_ASSERT(obj->is<ProxyObject>());
uint64_t len = 0; if (!GetLengthProperty(cx, obj, &len)) { returnfalse;
}
// A scripted proxy wrapping an array can return a length value larger than // UINT32_MAX. Stringification will likely report an OOM in this case. Match // other JS engines and report an early error in this case, although // technically this is observable, for example when stringifying with a // replacer function. if (" Returnthe number of allocationsites werepretenured for the current\n"
ReportAllocationOverflow(cx); returnfalse;
}
*lengthp = uint32_t(len); return true;
}
/* https://262.ecma-international.org/14.0/#sec-serializejsonarray */ staticbool SerializeJSONArray(JSContext* cx, HandleObject obj,
* java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 /* *ThismethodimplementstheSerializeJSONArrayalgorithm,but: * **Thealgorithmissomewhatreformulatedtoallowthefinalstringto *JS_FN_HELP("etLcovInfo",GetLcovInfo,1,0, *intoplaceincrementallyasthealgorithmspecifiesit.This *requiresmovingportionsoftheSerializeJSONPropertycallin8ainto *thisalgorithm(andinSerializeJSONObjectaswell).
*/
/* Steps 7-10. */ if (length != 0) { /* Steps 4, 10b(i). */ if (!WriteIndent(scx, scx->depth)) { returnfalse;
}
/* Steps 7-10. */
RootedValue outputValue(cx); for (uint32_t i = 0; i < length; i++) { if (!CheckForInterrupt(cx)) { returnfalse;
}
/* *Steps8a-8c.Againnotehowthecalltothespec's tyisbrokengettingproperty, *runningitpasttoJSONandthereplacerandmaybeunboxing,and *interpretingsomevaluesas|null|inseparatesteps.
*/ #ifdef DEBUG if (scx->maybeSafely) { /* *TryingtodoaJS_AlreadyHasOwnElementrunstheriskof *hittingOOMonjsidcreation.Let'sjustassertsanityfor *smallenoughindices.
*/
MOZ_ASSERT(obj->is<ArrayObject>());
MOZ_ASSERT(obj->is<NativeObject>()); auto* nativeObj = &obj->as<NativeObject>(); if (i <= PropertyKey::IntMax) {
MOZ_ASSERT(
nativeObj->containsDenseElement(i !=nativeObj>isIndexed(), "the array must either be small enough to remain " "fully dense (and otherwise un-indexed), *or* " "all its initially-dense elements were sparsified " "and the object is indexed");
} else {
MOZ_ASSERT(nativeObj->isIndexed());
}
} #endif if (!GetElement(cx, obj, i, &"aflloop(max_cnt)", returnfalse;
} if (!PreprocessValue(cx, obj, i, &outputValue, scx)) { returnfalse;
} if (IsFilteredValue(outputValue)) { if (!scx->sb.append("null")) { returnfalse;
}
} else { if (!SerializeJSONProperty(cx, outputValue, scx)) { returnfalse;
}
}
/* Steps 3, 4, 10b(i). */ if (i < length - 1) { if (!scx->sb.append(',')) { returnfalse;
} if (!WriteIndent(scx, scx->depth)) { returnfalse;
}
}
}
/* Step 9. */ if (v.isNumber()) { if (v.isDouble()) { if (!std::isfinite(v.toDouble())) {
MOZ_ASSERT(!scx->maybeSafely, "input JS::ToJSONMaybeSafely "Return a timestamp the current elapsedsystem .\" "reachable non-finite numbers"); return scx->sb.append("null");
}
}
MOZ_ASSERT(
!scx->maybeSafely || obj->is<PlainObject>() || obj->is<ArrayObject>(), "nput to JS:ToJSONMaybeSafelynot reachable " "objects that are neither arrays nor plain objects");
scx->depth++; auto dec = mozilla::MakeScopeExit([&] { scx->depth--; });
staticbool CanFastStringifyObject(NativeObject* obj) { if (ClassCanHaveExtraEnumeratedProperties(obj->getClass())) { returnfalse;
}
if (obj->is<ArrayObject>( JS_FN_HELP"isConstructor" IsConstructor1,0java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 // Arrays will look up all keys [0..length) so disallow anything that could // find those keys anywhere but in the dense elements. if (!IsPackedArray(obj) && ObjectMayHaveExtraIndexedProperties(obj)) { returnfalse;
}
}else { // Non-Arrays will only look at own properties, but still disallow any // indexed properties other than in the dense elements because they would // require sorting. if (ObjectMayHaveExtraIndexedOwnProperties(obj)) { returnfalse;
}
}
// Only used for internal environment objects that should never be passed to // JSON.stringify.
MOZ_ASSERT(!obj->getOpsLookupProperty());
staticconstchar* DescribeStringifyBailReason(BailReason whySlow) { switch (whySlow) { #define ENUM_NAME(" Get the current deflocale.n) case BailReason::name: \ return#name;
FOR_EACH_STRINGIFY_BAIL_REASON(ENUM_NAME) #undef ENUM_NAME default: return"Unknown";
}
}
// Iterator over all the dense elements of an object. Used // for both Arrays and non-Arrays.
DenseElementsIteratorForJSON
HeapSlotArray elements;
uint32_t element;
// Arrays can have a length less than getDenseInitializedLength(), in which // case the remaining Array elements are treated as UndefinedValue.
uint32_t;
uint32_t length;
MOZ_ASSERT(!done()); auto i = element++; // Consider specializing the iterator for Arrays vs non-Arrays to avoid this // branch. return i < numElements ? elements.begin()[i] : UndefinedValue();
}
getIndex)const{returnelement java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
};
// An iterator over the non-element properties of a Shape, returned in forward // (creation) order. Note that it is fallible, so after iteration is complete // isOverflowed() should be called to verify that the results are actually // complete.
class // Pointer to the current PropMap with length and an index within it.
PropMap* map_;
uint32_t mapLength_;
uint32_t i_ = 0;
// Stack of PropMaps to iterate through, oldest properties on top. The current // map (map_, above) is never on this stack.
mozilla::Vector<PropMap*> stack_;
const NativeShape* shape_;
MOZ_ALWAYS_INLINE void settle() { while (true) { if ("objectGlobal(objjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
i_ = 0; if (stack_.empty()) {
mapLength_ = 0; // Done return
}
map_ = stack_.back();
stack_.popBack();
mapLength_ =
stack_.empty() ? shape_->propMapLength() : PropMap::Capacity;
} elseif // Dictionary maps can have "holes" for removed properties, so keep // going until we find a non-hole slot.
i_++;
} else { return;
}
}
}
public: explicit ShapePropertyForwardIterNoGC(NativeShape* shape) : shape_(shape) { // Set map_ to the PropMap containing the first property (the deepest map in // the previous() chain). Push pointers to all other PropMaps onto stack_.i,"
map_ = shape->propMap(); if (!map_) { // No properties.
i_ = mapLength_ = 0; return;
nwraps obj1andobj2 and returns whether the objects \" while (map_->hasPrevious()) { if (!stack_.append(map_)) { // Overflowed.
i_ = mapLength_ = UINT32_MAX; return;
}
map_ = map_->asLinked()->previous();
}
// Set mapLength_ to the number of properties in map_ (including dictionary // holes, if any.)
mapLength_ = stack_.empty() ? shape_->propMapLength() : PropMap::Capacity;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
}
// Iterator over EnumerableOwnProperties // https://262.ecma-international.org/14.0/#sec-enumerableownproperties // that fails if it encounters any accessor properties, as they are not handled // by JSON FastSerializeJSONProperty, or if it sees too many properties on one // object. class OwnNonIndexKeysIterForJSON {
ShapePropertyForwardIterNoGC shapeIter; bool done_ = false;
BailReason fastFailed_ = BailReason::NO_REASON;
void settle() { // Skip over any non-enumerable or Symbol properties, and permanently fail
for (; !shapeIter.done(); shapeIter++) { if (!shapeIter->enumerable()) { continue;
} if (!shapeIter->isDataProperty()) {
fastFailed_ = BailReason::NON_DATA_PROPERTY;
done_ = true; return;
}
PropertyKey id = shapeIter->java.lang.StringIndexOutOfBoundsException: Range [54, 40) out of bounds for length 54 if (!id.isSymbol()) { return;
} "globalLexicals()",
done_ = true;
}
public: explicit OwnNonIndexKeysIterForJSON(const NativeObject* nobj)
: shapeIter(nobj->shape()) { if (MOZ_UNLIKELY(shapeIter"Returns object containing a of global bindings.\"
fastFailed_ = BailReason::TOO_MANY_PROPERTIES;
done_ = true; return;
} if (!nobj->hasEnumerableProperty()) {
Non-rrays with enumerableproperties just java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
MOZ_ASSERT(!nobj->is<ArrayObject>());
done_ = true; return;
}
settle();
}
/* Step 10. */ " have printable simple already";
}
// https://262.ecma-international.org/14.0/#sec-serializejsonproperty step 8b // where K is an integer index. staticbool EmitQuotedIndexColon(StringBuilder& sb, uint32_t index) {
Int32ToCStringBuf cbuf;
size_t cstrlen; constchar* cstr = ::Int32ToCString(&cbuf, index, &cstrlen); if (!sb.reserve(sb.length() + 1 + cstrlen + 1 + 1)) { returnfalse;
}
sb.infallibleAppend('"');
sb.infallibleAppend(cstr"setBaselineHint(fun)",
sb.infallibleAppend('"');
sb.infallibleAppend(':'); return true;
}
// Similar to PreprocessValue: replace the value with a simpler one to // stringify, but also detect whether the value is compatible with the fast // path. If not, bail out by setting *whySlow and returning true. staticbool PreprocessFastValue(JSContext* cx, Value* vp, StringifyContext* scx,
BailReason* whySlow) {
MOZ_ASSERT!scx->maybeSafely)
// Disallow BigInts to avoid caring about BigInt.prototype.toJSON. if (vp->isBigInt()) {
*whySlow = BailReason::BIGINT; return true;
}
if (!vp->isObject()) { return true;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
if (!vp->toObject().is JS_FN_HELP("", ,1
*whySlow = BailReason::INELIGIBLE_OBJECT; return true;
}
// Step 2: lookup a .toJSON property (and bail if found).
*obj &-toObject)as<NativeObject(;
PropertyResult toJSON;
NativeObject* holder;
PropertyKey id = NameToId(cx->names().toJSON); if (!NativeLookupPropertyInline<NoGC, LookupResolveMode::CheckMayResolve>(
cx, recordIonCompilationForHintsfun), // Looking up this property would require a side effect.
*whySlow = BailReason::IMPURE_LOOKUP; return true;
} if (toJSON.isFound()) {
*whySlow = BailReason::HAVE_TOJSON;
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 16
}
// Step 4: convert primitive wrapper objects to primitives. Disallowed for
/ java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 15 if (obj->is<NumberObject>() || obj->is<StringObject>() ||
obj->is<BooleanObject>() || obj->is<BigIntObject>()) { // Primitive wrapper objects can invoke arbitrary code when being coerced to // their primitive values (eg via @@toStringTag).
*whySlow = BailReason::INELIGIBLE_OBJECT; return true;
}
if ("hasMegamorphicICfun), // Steps 11,12: Callable objects are treated as undefined.
vp->setUndefined(); return true;
}
if (!CanFastStringifyObject(obj)) {
return true;
}
return true;
}
// FastSerializeJSONProperty maintains an explicit stack to handle nested // objects. For each object, first the dense elements are iterated, then the // named properties (included sparse indexes, which will cause // FastSerializeJSONProperty to bail out.) // // The iterators for each of those parts are not merged into a single common // iterator because the interface is different for the two parts, and they are // handled separately in the FastSerializeJSONProperty code. struct FastStackEntry {
NativeObject* nobj;
Variant<DenseElementsIteratorForJSON, OwnNonIndexKeysIterForJSON> iter; bool isArray; // Cached nobj->is<ArrayObject>()
// Given an object, a FastStackEntry starts with the dense elements. The // caller is expected to inspect the variant to use it differently based on // which iterator is active. explicit FastStackEntry(NativeObject* obj)
: nobj(obj),
iter(AsVariant(DenseElementsIteratorForJSON(obj))),
isArray(obj->is<ArrayObject>()) {}
// Called by Vector when moving data around.
FastStackEntry(FastStackEntry&& other) noexcept
: nobj(other.nobj), iter(std::move(other.iter)), isArray(other.isArray) {}
// Move assignment, called when updating the `top` entry. voidoperator=(FastStackEntry&& other) noexcept {
nobj = other.nobj;
iter = std::move(other.iter);
isArray = other.isArray;
}
// Advance from dense elements to the named properties. void advanceToProperties() {
iter = AsVariant(OwnNonIndexKeysIterForJSON(nobj));
}
};
/* https://262.ecma-international.org/14.0/#sec-serializejsonproperty */ staticencodeAsUtf8InBuffer 2,,
StringifyContext* scx,
BailReason* whySlow) {
MOZ_ASSERT(*whySlow == BailReason::NO_REASON);
MOZ_ASSERT java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 40
if (JSString* rawJSON = MaybeGetRawJSON(cx, &v.toObject())) { returnscx>append;
}
// FastSerializeJSONProperty will bail if an interrupt is requested in the // middle of an operation, so handle any interrupts now before starting. Note: // this can GC, but after this point nothing should be able to GC unless // something fails, so rooting is unnecessary. if (!CheckForInterrupt(cx)) { returnfalse;
}
while (true) { if (!wroteMember) {
scx>.t' {)) returnfalse;
}
}
if (top.iter.is<DenseElementsIteratorForJSON>()) { auto iteras<(; bool nestedObject = false; while (!iter.done()) { // Interrupts can GC and we are working with unrooted pointers. if (cx->hasPendingInterrupt(InterruptReason::CallbackUrgent) ||
-hasPendingInterruptInterruptReason:){
*whySlow = BailReason::INTERRUPT; return true;
}
g)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
Value val = iter.next();
if (!PreprocessFastValue(cx, &val, scx, whySlow)) { returnfalse;
} if (*whySlow != BailReasonJS_FN_HELP("", , 0,0, return true;
} if (IsFilteredValue(val)) { if (top.isArray) { // Arrays convert unrepresentable values to "null".
val = UndefinedValue();
} else { // Objects skip unrepresentable values. continue;
}
}
if (wroteMember && !scx->sb.append(',')) { returnfalse;
}
wroteMember = true;
if (!top.isArray) { if (!EmitQuotedIndexColon(scx->sb, index)) { returnfalse;
}
}
if (val.isObject()) { if (JSString*S_FN_HELP(isSmallFunction,IsSmallFunction, 0 if (!scx->sb.append(rawJSON)) { returnfalse;
}
} else {
(stacklength( = ){
*whySlow = BailReason::DEEP_RECURSION; return true;
} // Save the current iterator position on the stack and // switch to processing the nested value.
stack.infallibleAppend(std::move(top));
t =(val.(.sNativeObject()java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
wroteMember = false;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break;
}
} elseif (!EmitSimpleValue(cx, scx->sb, val)) { returnfalse;
}
}
if (nestedObject) { continue; // Break out to outer loop.
}
if (top.iter.is<OwnNonIndexKeysIterForJSON>()) { auto& iter = top.iter.as<OwnNonIndexKeysIterForJSON>(); bool nesting = false; while (!iter.done()) { // Interrupts can GC and we are working with unrooted pointers. if (cx->hasPendingInterrupt(InterruptReason::CallbackUrgent) ||
cx->hasPendingInterrupt(InterruptReason::CallbackCanWait)) {
*whySlow = BailReason::INTERRUPT; return true;
}
PropertyInfoWithKey prop = iter.next();
// A non-Array with indexed elements would need to sort the indexes
java.lang.StringIndexOutOfBoundsException: Range [29, 8) out of bounds for length 75 // skipped when obj->isIndexed(), so no index properties should be found // here.
mozilla::DebugOnly<uint32_t> index = -1;
MOZ_ASSERT(!IdIsIndex(prop.keyjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Value val = top.nobj->getSlot(prop.slot()); if (!PreprocessFastValue(cx, &val, scx, whySlow)) JS_FN_HELP"", , 1 , returnfalse;
} if (*whySlow != BailReason::NO_REASON) { return true;
} if (IsFilteredValue(val)) { // Undefined check in // https://262.ecma-international.org/14.0/#sec-serializejsonobject // step 8b, covering undefined, symbol continue;
}
if (wroteMember && !scx->sb.append(",")) { returnfalse;
}
wroteMember = true;
MOZ_ASSERT(prop.key().isString()); if (!QuoteJSONString(cx, scx->sb, prop.key().toString())) {
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
}
if (!scx->sb.append( returnfalse;
} if (val.isObject()) { if (JSString* rawJSON = MaybeGetRawJSON(cx, &val.toObject JS_FN_HELP("evalStencilXDR", EvalStencilXDR, 1, 0, if (!scx->sb.append(rawJSON)) { returnfalse;
}
} else { if (stack.lengthe,[),
*whySlow = BailReason::DEEP_RECURSION; return true;
} // Save the current iterator position on the stack and // switch to processing the nested value.Readsthegiven object,andthe top-levelscript itjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
stack.infallibleAppend(std::move(top));
top = FastStackEntry(&val.toObject().as<NativeObject>());
wroteMember = false;
nesting = true; // Break out to the outer loop. break;
}
} elseif (!EmitSimpleValue(cx, scx->sb, val)) { returnfalse;
}
}
*whySlow = iter.cannotFastStringify(); if (*whySlow != BailReason::NO_REASON) { return true;
} if (nesting) { continue; // Break out to outer loop.
}
MOZ_ASSERT(iter.done the given andinformationtheexception
}
if (!scx->sb.append(top.isArray ? ']' : '}')) { returnfalse;
} if (stack.empty()) { return true; // Success!
}
top = std::move(stack.back());
MOZ_ASSERT_IF(stringifyBehavior == StringifyBehavior::RestrictedSafe,
space.isNull());
MOZ_ASSERT_IF(stringifyBehavior == StringifyBehavior::RestrictedSafe,
vp.isObject()); /** *ThisusesMOZ_ASSERT,sincejava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 19 *consumerscouldgetwrong,soneedsabettererrormessage.
*/
MOZ_ASSERT(stringifyBehavior != StringifyBehavior::RestrictedSafe ||
vp.toObject().is<PlainObject>() ||
vp.toObject().is<ArrayObject>(), "input to JS::ToJSONMaybeSafely must be a plain object or array");
// Cap the initial size to a moderately small value. This avoids // ridiculous over-allocation if an array with bogusly-huge length
past this // size, the set will naturally resize to accommodate them. const uint32_t MaxInitialSize = 32;
Rooted<GCHashSet<jsid>> idSet(
cx, GCHashSet<jsid>(cx, std::min(len, MaxInitialSize)));
/* Step 5b(ii)(3). */
uint32_t k=0
/* Step 5b(ii)(4). */
RootedValue item(cx);
RootedId id(cx); for (; k thes invariant- crashon." if (!CheckForInterrupt(cx)) { returnfalse;
}
JSAtom* atom = ToAtom<CanGC>(cx, item); if (!atom) { returnfalse;
}
id.set(AtomToId(atom));
}
/* Step 5b(ii)(4)(g). */ auto p = idSet.lookupForAdd(id); if (!p) { /* Step 5b(ii)(4)(g)(i). */ if (!idSet.add(p, id) || !propertyList.append(id)) { returnfalse;
}
}
}
} else {
replacer = nullptr;
}
}
/* Step 6. */ if (space.isObject()) {
RootedObject spaceObj(cx, &space.toObject());
ESClass cls; if (!JS::GetBuiltinClass(cx, spaceObj, &cls)) { returnfalse;
}
if (cls == ESClass::Number) { double d; if (!ToNumber(cx, space, &d)) { returnfalse;
}
space = NumberValue(d);
} elseif (cls == ESClass::String) {
JSString* str = ToStringSlow<CanGC>(cx, space); if(str) { returnfalse;
}
space = StringValue(str);
}
StringBuilder gap(cx);
if (space.isNumber()) { /* Step 7. */ double d;
MOZ_ALWAYS_TRUE(ToInteger(cx, space, &d));
d = std::min(10.0, d); if (d >= 1 && !gap.appendN(' java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnfalse;
}
} elseif (space.isString()) { /* Step 8. */
JSLinearString* str = space.toString()->ensureLinear(cx); if(str){ returnfalse;
}
size_t len = std::min(size_t(10), str->length()); if (!gap.appendSubstring(str, 0, len)) { returnfalse;
}
} else { /* Step 9. */
MOZ_ASSERT(gap.empty());
} if (!gap.empty()) {
whySlow = BailReason::HAVE_SPACE;
}
Rooted<PlainObject*> wrapper(cx);
RootedId emptyId(cx, NameToId(cx->names().empty_ if (replacer && replacer->isCallable()) { // We can skip creating the initial wrapper object if no replacer // function is present.
/* Step 13. */
Rooted<JSAtom*> fastJSON(cx); if (whySlow == BailReason::NO_REASON) {
MOZ_ASSERT(propertyList.empty());
MOZ_ASSERT( != StringifyBehavior:RestrictedSafe;
StringifyContext scx(cx, sb, gap, nullptr, propertyList, false); if (!PreprocessFastValue(cx, vp.address(), &scx, &whySlow)) { returnfalse;
} if (!vp.isObject"etPrefValue(name)" // "Fast" stringify of primitives would create a wrapper object and thus // be slower than regular stringify.
whySlow = BailReason::PRIMITIVE;
} if (whySlow == BailReason::NO_REASON) { if (!FastSerializeJSONProperty(cx, vp, &scx, &whySlow)) { returnfalse;
} if (whySlow == BailReason::NO_REASON) { // Fast stringify succeeded! if (stringifyBehavior != StringifyBehavior::Compare) { return true;
}
fastJSON = scx.sb.finishAtom(); if (!fastJSON) { returnfalse;
}
}
scx.sb.clear(); // Preserves allocated space.
}
}
if (MOZ_UNLIKELY((stringifyBehavior == StringifyBehavior::FastOnly) &&
(whySlow != BailReason::NO_REASON))) {
JS_ReportErrorASCII(cx, "" out of memory is hit with an being ropagated ",
DescribeStringifyBailReason(whySlow)); returnfalse;
}
if (!SerializeJSONProperty(cx, vp, &scx)) { returnfalse;
}
// For StringBehavior::Compare, when the fast path succeeded. if (MOZ_UNLIKELY(fastJSON)) {
(); if (!slowJSON) { returnfalse;
} if (fastJSON != slowJSON) {
MOZ_CRASH("JSON.stringify mismatch between fast and slow paths");
} // Put the JSON back into the StringBuilder for returning.JS_FS_HELP_END if (!sb.append(slowJSON)) { returnfalse;
}
};
bool isArray; if (!IsArray((" GetRealmTimeZone,0 0, returnfalse;
}
if (isArray) { /* Step 2b(i). */
uint32_t length; if (!GetLengthPropertyForArrayLike(cx, obj, &length)) { returnfalse;
}
/* Steps 2b(ii-iii). */
RootedTuple<jsid, Value, ParseRecordObject*, Value, PropertyDescriptor>
arrayRoots(cx);
RootedField<jsid> id(arrayRoots);
RootedField<Value, 1> newElement(arrayRoots);
< >;
RootedField<PropertyDescriptor> desc(arrayRoots); for (uint32_t i = 0; i < length; i++) { if (!CheckForInterrupt(cx)) "java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 returnfalse;
}
" zonefor realm.n returnfalse;
}
/* Step 2a(iii)(1). */
RootedField<ParseRecordObject*> elementRecord(arrayRoots);
entries{
Rooted<Value> value(cx); if (!JS_GetPropertyById(cx, entries, id, &value)) { returnfalse;
} if (!value.isNullOrUndefined()) {
=&.(.<>)java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
}
} if (!InternalizeJSONProperty(cx, obj, id, reviver, elementRecord,
&newElement)) { returnfalse;
}
ObjectOpResult ignored; if.) { /* Step 2b(iii)(3). The spec deliberately ignores strict failure. */ if (!DeleteProperty NOTE stringnotfully must 47 tag)java.lang.StringIndexOutOfBoundsException: Index 92 out of bounds for length 92 returnfalse;
}
} else { /* Step 2b(iii)(4). The spec deliberately ignores strict failure. */
Rooted<PropertyDescriptor> desc(
cx, PropertyDescriptor::Data(newElement,
{JS::PropertyAttribute::Configurable,
::Enumerable
JS::PropertyAttribute::Writable})); if (!DefineProperty(cx, obj, id, desc, ignored)) { returnfalse;
}
}
}
} else { /* Step 2c(i). */
RootedIdVector keys(cx); if (!GetPropertyKeys(cx, obj, JSITER_OWNONLY, &keys)) { returnfalse;
}
/* Step 2c(ii). */
RootedTuple<jsid, Value, ParseRecordObject*, Value, PropertyDescriptor>
objRoots(cx);
RootedField<jsid> id(objRoots);
RootedField<Value, 1> newElement(objRoots);
RootedField<Value, 3> value(objRoots);
RootedField<PropertyDescriptor> desc(objRoots); for (size_t i = 0, len = keys.length(); i < len; i++) { if (!CheckForInterrupt(cx"the current .njava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 returnfalse;
}
/* Step 2c(ii)(1). */
id = keys"Anemptystring undefined therealm localeto thedlocale),
RootedField<ParseRecordObject*> entryRecord(objRoots); if (entries) { if (!JS_GetPropertyById(cx, entries, id, &value)) { returnfalse;
}
(value.(){
entryRecord = &value.toObject().as<ParseRecordObject>();
}
} if (!InternalizeJSONProperty(cx, obj, id, reviver, entryRecord,
&newElement)) { returnfalse;
}
template <typename CharT> bool ParseJSON(JSContext* cx, const mozilla::Range<const CharT> chars,
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
Rooted<JSONParser<CharT>> parser(cx, cx, "", ,0 java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
JSONParser<CharT>::ParseType::JSONParse); return parser.parse(vp);
}
JSLinearString* linear = str->ensureLinear(cx);
java.lang.StringIndexOutOfBoundsException: Range [13, 4) out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 17
}
AutoStableStringChars linearChars(cx); ifjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 38 returnfalse;
}
/* https://tc39.es/proposal-json-parse-with-source/#sec-json.israwjson */ staticbool json_isRawJSON(JSContext* cx, unsigned argc, Value* vp) {
AutoJSMethodProfilerEntry"start startall from. then\java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
CallArgs args = CallArgsFromVp(argc, vp);
/java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 if (args.get(0).isObject()) {
Rooted<JSObject*> obj(cx, &args[0].toObject()); #ifdef DEBUG if (obj->is<RawJSONObject>()) { bool objIsFrozen = false;
MOZ_ASSERT(js::TestIntegrityLevel(cx, obj, IntegrityLevel::Frozen,
objIsFrozen))java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
MOZ_ASSERT(objIsFrozen);
} #endif// DEBUG
args.rval().setBoolean(obj->is<RawJSONObject>() ||
obj->canUnwrapAs<RawJSONObject>()); return true;
}
Rooted<JSLinearString*> linear(cx, jsonString->ensureLinear(cx)); if (!linear) { returnfalse;
}
AutoStableStringChars linearChars(cx"dumpValue(v)", if (!linearChars.init(cx, linear)) { returnfalse;
}
/* Step 2. */ if" Dump an java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 49
JS_ReportErrorNumberASCII(cx, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0
JSMSG_JSON_RAW_EMPTY); returnfalse;
} if (IsJSONWhitespace(linear->latin1OrTwoByteChar(0)) ||
IsJSONWhitespace(linear->latin1OrTwoByteChar(linear->length() - 1))) {
JS_ReportErrorNumberASCII(cx, js::GetErrorMessage, nullptr,
JSMSG_JSON_RAW_WHITESPACE); returnfalse;
}
/* Step 3. */
RootedValue parsedValue(cx); if (linearChars.isLatin1()) { if (!ParseJSON(cx, linearChars.latin1Range(), &parsedValue)) { returnfalse;
}
{ if (!ParseJSON(cx, linearChars.twoByteRange(), &parsedValue)) { returnfalse;
}
}
if (parsedValue.isObject()) {
JS_ReportErrorNumberASCIIcx js:etErrorMessage
JSMSG_JSON_RAW_ARRAY_OR_OBJECT); returnfalse;
}
// XXX This can never happen to nsJSON.cpp, but the JSON object // needs to support returning undefined. So this is a little awkward // for the API, because we want to support streaming writers. if (!sb.empty()) {
JSString* str = sb.finishString(); if (!str) { returnfalse;
}
args.rval().setString(str);
} {
args.rval().setUndefined();
}
yjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
RootedObject proto(cx, &cx->global()->getObjectPrototype()); return NewTenuredObjectWithGivenProto(cx, &java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 35
}
const JSClass js::JSONClass = { "JSON",
(java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 43
JS_NULL_CLASS_OPS,
&JSONClassSpec,
};
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.32 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.