ce3ce2f66d
New revision: 7a44a37f66b58358dd8ab85ccde1998fafa95e53 Upstream review: https://chromium-review.googlesource.com/c/deps/inspector_protocol/+/1899564 Previously, we used a wrapper library, v8-inspector-protocol-encoding.h to inject the string<->number conversion into the cbor parser. This meant that the unittests, in third_party/inspector_protocol/crdtp/json_test.cc inadvertently did not run with the same string<->number conversion code. Thus, we missed that the production implementation would return INF for out of range double literals, as opposed to rejecting the incoming JSON. When switching the library to the build dependency on json_platform_v8.cc as it's in this change, the test immediately failed which made it trivial to fix the implementation. Old implementation: https://chromium-review.googlesource.com/c/v8/v8/+/1913424/6/src/inspector/v8-inspector-protocol-encoding.cc New implementation (checks std::isfinite): https://chromium-review.googlesource.com/c/v8/v8/+/1913424/6/third_party/inspector_protocol/crdtp/json_platform_v8.cc Change-Id: Ia48fe1f4e359eea47d0ede9ceadea1fd635292e0 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1913424 Reviewed-by: Yang Guo <yangguo@chromium.org> Commit-Queue: Johannes Henkel <johannes@chromium.org> Cr-Commit-Position: refs/heads/master@{#65219}
56 lines
2.2 KiB
C++
56 lines
2.2 KiB
C++
// Copyright 2019 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef V8_CRDTP_JSON_H_
|
|
#define V8_CRDTP_JSON_H_
|
|
|
|
#include <memory>
|
|
#include "export.h"
|
|
#include "parser_handler.h"
|
|
|
|
namespace v8_crdtp {
|
|
namespace json {
|
|
// =============================================================================
|
|
// json::NewJSONEncoder - for encoding streaming parser events as JSON
|
|
// =============================================================================
|
|
|
|
// Returns a handler object which will write ascii characters to |out|.
|
|
// |status->ok()| will be false iff the handler routine HandleError() is called.
|
|
// In that case, we'll stop emitting output.
|
|
// Except for calling the HandleError routine at any time, the client
|
|
// code must call the Handle* methods in an order in which they'd occur
|
|
// in valid JSON; otherwise we may crash (the code uses assert).
|
|
std::unique_ptr<ParserHandler> NewJSONEncoder(std::vector<uint8_t>* out,
|
|
Status* status);
|
|
|
|
std::unique_ptr<ParserHandler> NewJSONEncoder(std::string* out, Status* status);
|
|
|
|
// =============================================================================
|
|
// json::ParseJSON - for receiving streaming parser events for JSON
|
|
// =============================================================================
|
|
|
|
void ParseJSON(span<uint8_t> chars, ParserHandler* handler);
|
|
|
|
void ParseJSON(span<uint16_t> chars, ParserHandler* handler);
|
|
|
|
// =============================================================================
|
|
// json::ConvertCBORToJSON, json::ConvertJSONToCBOR - for transcoding
|
|
// =============================================================================
|
|
|
|
Status ConvertCBORToJSON(span<uint8_t> cbor, std::string* json);
|
|
|
|
Status ConvertCBORToJSON(span<uint8_t> cbor, std::vector<uint8_t>* json);
|
|
|
|
Status ConvertJSONToCBOR(span<uint8_t> json, std::vector<uint8_t>* cbor);
|
|
|
|
Status ConvertJSONToCBOR(span<uint16_t> json, std::vector<uint8_t>* cbor);
|
|
|
|
Status ConvertJSONToCBOR(span<uint8_t> json, std::string* cbor);
|
|
|
|
Status ConvertJSONToCBOR(span<uint16_t> json, std::string* cbor);
|
|
} // namespace json
|
|
} // namespace v8_crdtp
|
|
|
|
#endif // V8_CRDTP_JSON_H_
|