protobufjs / protobuf.js

Protocol Buffers for JavaScript & TypeScript.
Other
9.88k stars 1.41k forks source link

Illegal name '}' #1262

Open wcjohnson opened 5 years ago

wcjohnson commented 5 years ago

protobuf.js version: 6.8.8

When parsing the following proto file from the Envoy proxy control plane:

https://github.com/envoyproxy/envoy/blob/master/api/envoy/api/v2/cds.proto

The following parsing error is thrown:

Error: illegal name '}' (/Users/wcj/dev/mesh/experiments/kube/gitops/protocols/envoy/api/v2/cds.proto, line 130)
    at illegal (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:94:16)
    at parseOptionValue (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:559:27)
    at parseOption (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:551:9)
    at parseInlineOptions (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:585:17)
    at parseField_line (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:376:13)
    at ifBlock (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:290:17)
    at parseField (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:366:9)
    at parseType_block (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:338:21)
    at ifBlock (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:286:17)
    at parseType (/Users/wcj/dev/mesh/experiments/kube/gitops/node_modules/protobufjs/src/parse.js:304:9)

The relevant lines of .proto code are:

  // The timeout for new network connections to hosts in the cluster.
  google.protobuf.Duration connect_timeout = 4 [
    (validate.rules).duration.gt = {},
    (gogoproto.stdduration) = true,
    (gogoproto.nullable) = false
  ];

It appears the parser is having difficulty with (validate.rules).duration.gt = {}. Removing the bracketed annotation resolves the parsing problem.

wcjohnson commented 5 years ago

This may be related to https://github.com/protobufjs/protobuf.js/issues/1142 as well. Both result from trying to load the Envoy control plane defs.