It's been my experience that creating your own generator classes that hook
directly into libprotoc has solved this exact issue. I've implemented a
ruby generator for the protobuf ruby gem. By hooking in and registering
your generator you let protoc do all the work of parsing the .proto files
and validating their structure. If everything checks out you're handed nice
descriptor objects that you can use to generate your own language-specific
definitions. The gem used to have a custom racc parser but I moved away
from it because it had inconsistent parsing behavior from that of protoc.
Now that we're hooking into libprotoc we get all the parse validation you
If it's any help you can check out my generator class. I've also
linked to a sample file that was created by the generator. Let me know
if that helps answer your question, or if it raises more. :)
On Friday, November 16, 2012 5:08:16 PM UTC-7, Jeroen Ooms wrote:
> I am using the RProtoBuf package, which interfaces to the c++ protobuf
> library. I was wondering if there is any way of 'validating' a pb
> message, in the sense that you can check if it actually is a valid
> message for a given pb description. Currently, RProtoBuf is very
> permissive and will basically accept anything. E.g the code below will
> not throw an error, even though the file obviously is not a valid
> tutorial.Person message:
> read(tutorial.Person, "/etc/passwd")
> In practice, it is quite easy to introduce errors by accidentally reading
> a message using the wrong description. It would be very helpful if there
> was a way of preventing this kind of problems by some sort of validation.
> Is there support for this in the c++ library, or does protobuf basically
> assume that the user/application has some other way of validating a message?
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To view this discussion on the web visit
To post to this group, send email to firstname.lastname@example.org.
To unsubscribe from this group, send email to
For more options, visit this group at