Indeed, this was a bug that we fixed. On Wed, Dec 8, 2010 at 7:04 AM, jim horng <[email protected]> wrote:
> Hi Kenton, > > here are the stacktrace, i found i'm using 2.1.0 > > java.lang.NullPointerException > > at > com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:422) > > at > com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:289) > > at > com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:621) > > at > com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:602) > > at > com.trendmicro.mist.proto.MistMessage$MessageBlock$Builder.mergeFrom(MistMessage.java:504) > > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:358) > > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:351) > > at com.trendmicro.mist.Session.runProducer(Session.java:288) > > at com.trendmicro.mist.Session.run(Session.java:805) > > at java.lang.Thread.run(Thread.java:619) > > > After I switch to 2.3.0, the exception become much more reasonable: > Exception in thread "main" > com.google.protobuf.InvalidProtocolBufferException: Protocol message > contained an invalid tag (zero). > at > com.google.protobuf.InvalidProtocolBufferException.invalidTag(InvalidProtocolBufferException.java:68) > at > com.google.protobuf.CodedInputStream.readTag(CodedInputStream.java:90) > at test.Test$Person$Builder.mergeFrom(Test.java:279) > at test.Test$Person$Builder.mergeFrom(Test.java:1) > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:244) > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:183) > at > com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:162) > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:661) > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:183) > at > com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:153) > at > com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:654) > at test.Test$Person.parseFrom(Test.java:119) > at test.Test_pb_NPE.main(Test_pb_NPE.java:21) > > thanks > > > On Wed, Dec 8, 2010 at 11:34 AM, Kenton Varda <[email protected]> wrote: > >> The file you attached is not useful without source code. >> >> But what would be even better is if you could provide the stack trace for >> the NullPointerException. The parser should never throw NPE and I'm not >> aware of any bugs which cause it to throw NPE. >> >> BTW, it's very easy for bytes which are not actually a protocol buffer to >> parse correctly as a protocol buffer. The protobuf encoding is pretty >> dense. So I would suggest that you instead use some sort of tagging >> mechanism to distinguish protobuf data from other kinds of data that you >> need to process. >> >> On Mon, Dec 6, 2010 at 2:41 AM, jim horng <[email protected]> wrote: >> >>> Hi all, >>> >>> It occur to me that when I'm trying to parse any of the binary data >>> files I listed below, >>> using <Message>.parseFrom(byte []). it said nullpointer exception. >>> >>> To my best knowledge, I think when the raw bytes does not contain >>> required field, protobuf API should return invalidprotobufexception >>> when using .parseFrom(), or at least it will throw >>> uninitializeprotobuf exception when .build(). >>> so that client will know what happen and have change to handle them >>> correctly. >>> But if it return nullpointerexception, it will be hard to know what >>> really happen, it can only be roughly assumed message parsing is >>> failed. >>> My goal is just to determine if the received binary files is an >>> expected protobuf message or not. >>> >>> Please kindly advise or if this is work as design under some reason. >>> Thanks a lot ! >>> >>> >>> >>> <code snippet> >>> String filepath = "np1.pb"; >>> byte[] file_byteary = getBytesFromFile(new File(filepath)); >>> >>> xxx.Connection.Builder conn_builder = >>> xxx.Connection.newBuilder(); >>> xxx.Connection MB_tmp = >>> xxx.Connection.parseFrom(file_byteary); >>> conn_builder.mergeFrom(MB_tmp); >>> System.out.println("is init?" + conn_builder.isInitialized()); >>> assertTrue(conn_builder.build() != null); >>> </code snippet> >>> >>> * test data >>> >>> https://docs.google.com/leaf?id=0B9CkCymjWlZLNWMyMGNiNjEtMDJiZi00NDY0LTgzMWUtMjI1N2I0MWVhNjlh&hl=en >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Protocol Buffers" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]<protobuf%[email protected]> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/protobuf?hl=en. >>> >>> >> > > > -- > Best Regards, > Jim(洪懷謙) > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.
