Skip to content

Commit 9979ba0

Browse files
No public description
PiperOrigin-RevId: 971772017
1 parent 7ea4e01 commit 9979ba0

9 files changed

Lines changed: 137 additions & 95 deletions

File tree

maldoca/js/ast/ast_util.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ BabelAstString GetAstStringFromFileAst(const JsFile& file) {
123123

124124
BabelAstString result;
125125
result.set_value(ast_json_str);
126-
result.set_string_literals_base64_encoded(false);
126+
result.set_string_values_base64_encoded(false);
127127
return result;
128128
}
129129

maldoca/js/babel/babel.proto

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ message BabelParseRequest {
6969
// ```
7070
optional bool replace_invalid_surrogate_pairs = 2;
7171

72-
// Whether string literals will be base64-encoded in the AST.
72+
// Whether string values will be base64-encoded in the AST.
7373
//
74-
// base64_encode_string_literals == false:
74+
// base64_encode_string_values == false:
7575
// ```
7676
// Node {
7777
// type: 'StringLiteral',
@@ -80,15 +80,15 @@ message BabelParseRequest {
8080
// }
8181
// ```
8282
//
83-
// base64_encode_string_literals == true:
83+
// base64_encode_string_values == true:
8484
// ```
8585
// Node {
8686
// type: 'StringLiteral',
8787
// extra: { rawValue: 'YQ==', raw: '"\u0041"' },
8888
// value: 'YQ=='
8989
// }
9090
// ```
91-
optional bool base64_encode_string_literals = 5 [default = false];
91+
optional bool base64_encode_string_values = 5 [default = false];
9292

9393
// The mode in which source code should be parsed. "unspecified" defaults to
9494
// "script". "unambiguous" will make @babel/parser attempt to guess, based on
@@ -148,8 +148,8 @@ message BabelAstString {
148148
// The actual string.
149149
optional string value = 1;
150150

151-
// Whether string literals have been base64-encoded.
152-
optional bool string_literals_base64_encoded = 2;
151+
// Whether string values have been base64-encoded.
152+
optional bool string_values_base64_encoded = 2;
153153

154154
optional BabelScopes scopes = 3;
155155
}

maldoca/js/babel/babel_internal.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ nlohmann::json BabelParseOptionsToJson(const BabelParseRequest &request) {
4949

5050
nlohmann::json options{
5151
// Our custom options:
52-
{"base64EncodeStringLiterals", request.base64_encode_string_literals()},
52+
{"base64EncodeStringValues", request.base64_encode_string_values()},
5353
{"replaceInvalidSurrogatePairs",
5454
request.replace_invalid_surrogate_pairs()},
5555
{"computeScopes", request.compute_scopes()},
@@ -70,11 +70,11 @@ nlohmann::json BabelParseOptionsToJson(const BabelParseRequest &request) {
7070
}
7171

7272
nlohmann::json BabelGenerateOptionsToJson(const BabelGenerateOptions &options,
73-
bool string_literals_base64_encoded) {
73+
bool string_values_base64_encoded) {
7474
nlohmann::json json{
7575
{"comments", options.include_comments()},
7676
{"compact", options.compact()},
77-
{"base64DecodeStringLiterals", string_literals_base64_encoded},
77+
{"base64DecodeStringValues", string_values_base64_encoded},
7878
{"sourceMaps", options.source_maps()},
7979
};
8080

maldoca/js/babel/babel_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace maldoca {
2323
nlohmann::json BabelParseOptionsToJson(const BabelParseRequest &request);
2424

2525
nlohmann::json BabelGenerateOptionsToJson(const BabelGenerateOptions &options,
26-
bool string_literals_base64_encoded);
26+
bool string_values_base64_encoded);
2727

2828
} // namespace maldoca
2929

maldoca/js/babel/babel_internal.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ message BabelGenerateRequest {
3333
// Should comments be included in output?
3434
optional bool include_comments = 1 [default = true];
3535

36-
// Whether we should base64-decode string literals.
37-
optional bool base64_decode_string_literals = 2 [default = false];
36+
// Whether we should base64-decode string values.
37+
optional bool base64_decode_string_values = 2 [default = false];
3838

3939
// Whether to minify the generated source.
4040
optional bool compact = 3 [default = false];

maldoca/js/babel/babel_test.cc

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ namespace maldoca {
3838
using ::absl_testing::StatusIs;
3939
using ::maldoca::testing::EqualsProto;
4040
using ::testing::ElementsAre;
41+
using ::testing::HasSubstr;
4142
using ::testing::IsEmpty;
4243
using ::testing::StrEq;
4344
using ::testing::StrNe;
@@ -80,6 +81,38 @@ TEST_P(BabelTest, ParseSimpleCode) {
8081
EXPECT_THAT(result.errors, EqualsProto(""));
8182
}
8283

84+
static constexpr char kInvalidSurrogate[] =
85+
"var i = \"\\udf06\\ud834\";\n"
86+
"var j = `\\udf06\\ud834`;";
87+
88+
TEST_P(BabelTest, ParseInvalidSurrogate) {
89+
std::unique_ptr<Babel> babel = GetParam().babel_factory();
90+
BabelParseRequest request;
91+
request.set_base64_encode_string_values(true);
92+
MALDOCA_ASSERT_OK_AND_ASSIGN(
93+
BabelParseResult parse_result,
94+
babel->Parse(kInvalidSurrogate, request, absl::InfiniteDuration()));
95+
96+
EXPECT_THAT(parse_result.ast_string.value(), StrNe(""));
97+
EXPECT_THAT(parse_result.errors, EqualsProto(""));
98+
EXPECT_TRUE(parse_result.ast_string.string_values_base64_encoded());
99+
// Base64 encoding for "\udf06\ud834" (UTF-16LE: 0x06, 0xdf, 0x34, 0xd8).
100+
EXPECT_THAT(parse_result.ast_string.value(), HasSubstr("Bt802A=="));
101+
// Base64 encoding for identifier name "i" (UTF-16LE: 0x69, 0x00).
102+
EXPECT_THAT(parse_result.ast_string.value(), HasSubstr("aQA="));
103+
// Base64 encoding for identifier name "j" (UTF-16LE: 0x6a, 0x00).
104+
EXPECT_THAT(parse_result.ast_string.value(), HasSubstr("agA="));
105+
106+
BabelGenerateOptions generate_options;
107+
MALDOCA_ASSERT_OK_AND_ASSIGN(
108+
BabelGenerateResult generate_result,
109+
babel->Generate(parse_result.ast_string, generate_options,
110+
absl::InfiniteDuration()));
111+
112+
EXPECT_EQ(generate_result.source_code, kInvalidSurrogate);
113+
EXPECT_EQ(generate_result.error, std::nullopt);
114+
}
115+
83116
TEST_P(BabelTest, ParseVarDef) {
84117
std::unique_ptr<Babel> babel = GetParam().babel_factory();
85118
BabelParseRequest request;

maldoca/js/driver/conversion_test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ absl::StatusOr<TestCase> GetTestCase() {
106106

107107
BabelAstString babel_ast_string;
108108
babel_ast_string.set_value(CompactJsonString(parsed_ast_json_str));
109-
babel_ast_string.set_string_literals_base64_encoded(false);
109+
babel_ast_string.set_string_values_base64_encoded(false);
110110
*babel_ast_string.mutable_scopes() = scopes;
111111

112112
ABSL_ASSIGN_OR_RETURN(std::string serialized_ast_json_str,
@@ -126,7 +126,7 @@ absl::StatusOr<TestCase> GetTestCase() {
126126

127127
BabelAstString lifted_babel_ast_string;
128128
lifted_babel_ast_string.set_value(CompactJsonString(serialized_ast_json_str));
129-
lifted_babel_ast_string.set_string_literals_base64_encoded(false);
129+
lifted_babel_ast_string.set_string_values_base64_encoded(false);
130130
*lifted_babel_ast_string.mutable_scopes() = scopes;
131131

132132
return TestCase{

0 commit comments

Comments
 (0)