К обсуждениям

Safari Technology Preview 251: JSON.stringify неверно проверяет toJSON

Редакция VOne Технологии

Safari Technology Preview 251: JSON.stringify неверно проверяет toJSON. Локальная диагностическая процедура, матрица «toJSON location × lookup count × call count × output/error», отрицательный контроль и безопасный критерий остановки без production-данных.

Короткий ответ и точная граница симптома

Для запроса «как проверить toJSON lookup в JSON stringify Safari Technology Preview 251» проверяется ровно одна ситуация: JSON.stringify() обращается к toJSON не по ожидаемой семантике и даёт регрессию на объекте с контролируемым getter или prototype. Observed lookup и вызов сопоставляются с expected для каждого descriptor. Правильная JSON-строка одного кейса не покрывает остальные пути. Это вывод только для Safari Technology Preview 251 и минимального примера; стабильный Safari, другие браузеры и конкретный сайт требуют отдельного прогона. Ключевой риск ложного вывода: Replacer и BigInt способны бросить независимую ошибку; основной тест не включает их, пока lookup не локализован. Поэтому ожидаемое состояние формулируется до действия, а неизвестный результат остаётся unknown.

Доказательная опора: Release 251 и 318072@main

Официальные release notes WebKit опубликованы 26 августа 2026 года и прямо сообщают: исправлена регрессия JSON.stringify() в способе проверки toJSON. Пункт ведёт на 318072@main, то есть на первичную запись изменения в WebKit. Связка release page и commit подтверждает наличие технического изменения, но не его распространённость, поисковую частоту или результат на пользовательском проекте. Google News и публичные community-страницы остаются leads: их сниппеты, голоса и отдельные ответы не используются как доказательство причины.

Диагностический паспорт: матрица «toJSON location × lookup count × call count × output/error»

До воздействия заполните поля: own/prototype location toJSON, descriptor, getter call count, return value, replacer presence, serialized result и thrown error. Рабочий артефакт — матрица «toJSON location × lookup count × call count × output/error». Отрицательный или сравнительный контроль: обычный data object без toJSON подтверждает базовую работу сериализации. К каждому наблюдению добавляются точная сборка TP 251, время, zoom и короткие expected/observed; сведения из памяти не подставляются. Не сохраняются имя профиля, IP, cookie, токены, Authorization, локальные пути, полные URL с приватными query и содержимое рабочих документов. Если обязательное поле нельзя измерить безопасно, статья предписывает остановку, а не догадку.

Пошаговый canary, контроль и полный возврат

На отдельной локальной странице нужно создать несколько локальных объектов: без toJSON, с own function, с prototype function и с наблюдаемым getter; сериализовать каждый один раз и удалить references. Сначала снимается baseline, затем меняется только одна названная переменная и выполняется один заранее определённый ввод. После записи результата применяется контроль: обычный data object без toJSON подтверждает базовую работу сериализации. Затем исходное состояние полностью восстанавливается и baseline измеряется ещё раз. Прогон получает invalid test, если rollback не вернул исходные значения, вмешалось расширение, не пришло доверенное пользовательское событие или среда не предоставляет нужный API/UI. В таком случае не добавляют второе изменение и не объявляют браузер неисправным.

Развилка решения, красная линия и пакет воспроизведения

Observed lookup и вызов сопоставляются с expected для каждого descriptor. Правильная JSON-строка одного кейса не покрывает остальные пути. Практический результат хранится как матрица «toJSON location × lookup count × call count × output/error». Статус reproduced ставится только после одинакового повторения и успешного rollback; not reproduced относится лишь к текущему fixture; unsupported и environment-blocked не смешиваются с unknown. Красная линия: не сериализовать рабочие данные и не использовать Proxy вместе с getter в первом canary. Для передачи в поддержку достаточно версии, минимального HTML/CSS/JS, таблицы expected/observed, контрольного результата и ссылки на 318072@main. Перед отправкой удаляются идентификаторы и реальные данные. Материал не обещает исправление, индексацию, позицию или универсальное поведение другой версии Safari.

Материал подготовлен редакцией VOne с помощью ИИ; дата, первичный WebKit commit, техническая граница, контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.