kshchepanovskyi / protostuff-googlecode-exported

Automatically exported from code.google.com/p/protostuff

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Crash Java7 with JsonIOUtil.toByteArray

GoogleCodeExporter opened this issue · comments

What steps will reproduce the problem?
1. Create an annotated prostuff pojo using @Tag
2. Register pojo
3. In unit test create null instance of the object (MyTestObject mto = null)
4. Try to convert it to bytearray: JsonIOUtil.toByteArray(mto, mtoSchema, false)
5. Watch your JVM go up in flames


What is the expected output? What do you see instead?
I expect an error or an empty byte array.  Instead the JVM crashed with a fatal 
error.

What version of the product are you using? On what operating system?
# JRE version: 7.0_07-b11
# Java VM: Java HotSpot(TM) Client VM (23.3-b01 mixed mode, sharing windows-x86 
)


Please provide any additional information below.

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x5f2877bd, pid=3808, tid=8316
#
# JRE version: 7.0_07-b11
# Java VM: Java HotSpot(TM) Client VM (23.3-b01 mixed mode, sharing windows-x86 
)
# Problematic frame:
# V  [jvm.dll+0x1177bd]

Original issue reported on code.google.com by mgiac...@gltech.com on 6 May 2013 at 10:15

Unsafe.getXXX is the one barfing that when the message is null.
Serializing a null is invalid, so the null-protection could either be in the IO 
utils or your code.

Just like the generated schema (null protection not in the library, but in the 
generated code), it's better you check null before you use any of the IO utils.

Original comment by david.yu...@gmail.com on 29 May 2013 at 11:23

I have at this point wrapped your libraries to make sure they are safe.

I have to say it find odd that you would be fine building a library that would 
allow an end user to crash their JVM.  Also keep in mind that it crashes in a 
way that does not leave a user with a stack trace to find out why their JVM has 
crashed.  A middle of the road developer would not be able to track this down.

Your are making a design decision that allows users to crash their JVM in a way 
that leaves them totally in the dark as to why.  Seems like a hard to defend 
design decision to me.


Original comment by mgiac...@gltech.com on 30 May 2013 at 2:59

I can probably add this line in all of the IO utils.
if(message == null) throw new NullPointerException();

Original comment by david.yu...@gmail.com on 30 May 2013 at 3:16

  • Changed state: Accepted