Skip to content

Commit c482a5b

Browse files
committed
Fixed: Unified safe property escapes and added a test for #834
1 parent e04ddc4 commit c482a5b

22 files changed

Lines changed: 108 additions & 94 deletions

cli/targets/static.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
module.exports = static_target;
33

44
var protobuf = require("../.."),
5-
cliUtil = require("../util"),
65
UglifyJS = require("uglify-js"),
76
espree = require("espree"),
87
escodegen = require("escodegen"),
@@ -42,7 +41,7 @@ function static_target(root, options, callback) {
4241
}
4342
push("// Exported root namespace");
4443
}
45-
var rootProp = cliUtil.safeProp(config.root || "default");
44+
var rootProp = util.safeProp(config.root || "default");
4645
push((config.es6 ? "const" : "var") + " $root = $protobuf.roots" + rootProp + " || ($protobuf.roots" + rootProp + " = {});");
4746
buildNamespace(null, root);
4847
return callback(null, out.join("\n"));
@@ -98,7 +97,7 @@ function exportName(object, asInterface) {
9897
function escapeName(name) {
9998
if (!name)
10099
return "$root";
101-
return cliUtil.reserved(name) ? name + "_" : name;
100+
return util.isReserved(name) ? name + "_" : name;
102101
}
103102

104103
function aOrAn(name) {
@@ -363,7 +362,7 @@ function buildType(ref, type) {
363362
"@interface " + escapeName("I" + type.name)
364363
];
365364
type.fieldsArray.forEach(function(field) {
366-
var prop = util.safeProp(field.name);
365+
var prop = util.safeProp(field.name); // either .name or ["name"]
367366
prop = prop.substring(1, prop.charAt(0) === "[" ? prop.length - 1 : prop.length);
368367
var jsType = toJsType(field);
369368
if (field.optional)
@@ -398,7 +397,7 @@ function buildType(ref, type) {
398397
jsType = jsType + "|null|undefined";
399398
pushComment([
400399
field.comment || type.name + " " + field.name + ".",
401-
"@member {" + jsType + "} " + escapeName(field.name),
400+
"@member {" + jsType + "} " + field.name,
402401
"@memberof " + exportName(type),
403402
"@instance"
404403
]);

cli/util.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -181,21 +181,6 @@ exports.pad = function(str, len, l) {
181181
return str;
182182
};
183183

184-
exports.reserved = function reserved(name) {
185-
return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name);
186-
};
187-
188-
// generate dot-notation property accessors where possible. this saves a few chars (i.e. m.hello
189-
// instead of m["hello"]) but has no measurable performance impact (on V8). not present within the
190-
// library itself because the reserved words check requires a rather longish regex.
191-
exports.safeProp = protobuf.util.safeProp = (function(safeProp) {
192-
return function safeProp_dn(name) {
193-
return !/^[$\w]+$/.test(name) || exports.reserved(name)
194-
? safeProp(name)
195-
: "." + name;
196-
};
197-
})(protobuf.util.safeProp);
198-
199184
exports.jsonSafeProp = function(json) {
200185
return json.replace(/^( +)"(\w+)":/mg, function($0, $1, $2) {
201186
return exports.safeProp($2).charAt(0) === "."

dist/light/protobuf.js

Lines changed: 14 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/light/protobuf.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/light/protobuf.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/light/protobuf.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/minimal/protobuf.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/minimal/protobuf.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.js

Lines changed: 14 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/protobuf.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)