Skip to content

Commit 15ee83f

Browse files
Bundled definitions were loaded correctly
1 parent 6fa4c34 commit 15ee83f

2 files changed

Lines changed: 23 additions & 10 deletions

File tree

src/root.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,16 @@ Root.prototype.load = function load(filename, options, callback) {
9494
throw err;
9595
cb(err, root);
9696
}
97+
98+
// Bundled definition existence checking
99+
function getBundledFileName(filename) {
100+
const idx = filename.lastIndexOf("google/protobuf/");
101+
if (idx > -1) {
102+
var altname = filename.substring(idx);
103+
if (altname in common) return altname;
104+
}
105+
return null;
106+
}
97107

98108
// Processes a single file
99109
function process(filename, source) {
@@ -109,11 +119,11 @@ Root.prototype.load = function load(filename, options, callback) {
109119
i = 0;
110120
if (parsed.imports)
111121
for (; i < parsed.imports.length; ++i)
112-
if (resolved = self.resolvePath(filename, parsed.imports[i]))
122+
if (resolved = (getBundledFileName(parsed.imports[i]) || self.resolvePath(filename, parsed.imports[i])))
113123
fetch(resolved);
114124
if (parsed.weakImports)
115125
for (i = 0; i < parsed.weakImports.length; ++i)
116-
if (resolved = self.resolvePath(filename, parsed.weakImports[i]))
126+
if (resolved = (getBundledFileName(parsed.weakImports[i]) || self.resolvePath(filename, parsed.weakImports[i])))
117127
fetch(resolved, true);
118128
}
119129
} catch (err) {
@@ -126,14 +136,6 @@ Root.prototype.load = function load(filename, options, callback) {
126136
// Fetches a single file
127137
function fetch(filename, weak) {
128138

129-
// Strip path if this file references a bundled definition
130-
var idx = filename.lastIndexOf("google/protobuf/");
131-
if (idx > -1) {
132-
var altname = filename.substring(idx);
133-
if (altname in common)
134-
filename = altname;
135-
}
136-
137139
// Skip if already loaded / attempted
138140
if (self.files.indexOf(filename) > -1)
139141
return;

tests/node/api_load-sync.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,14 @@ tape.test("load sync", function(test) {
3535

3636
test.end();
3737
});
38+
39+
tape.test("should load bundled definitions even if resolvePath method was overrided", function(test) {
40+
const protoFilePath = "tests/data/common.proto";
41+
let root = new protobuf.Root();
42+
root.resolvePath = (origin, target) => origin === "" && target === protoFilePath ? target : null;
43+
44+
root.loadSync(protoFilePath);
45+
46+
test.ok(root.lookup("Something"), "should parse message Something");
47+
test.end();
48+
});

0 commit comments

Comments
 (0)