http://bugzilla.novell.com/show_bug.cgi?id=586870
http://bugzilla.novell.com/show_bug.cgi?id=586870#c0 Summary: Exception when serializing empty byte array generated from empty string Classification: Mono Product: Mono: Class Libraries Version: 2.6.x Platform: x86-64 OS/Version: Ubuntu Status: NEW Severity: Critical Priority: P5 - None Component: CORLIB AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Created an attachment (id=347481) --> (http://bugzilla.novell.com/attachment.cgi?id=347481) Test case to demonstrate bug in serializing User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/533.2+ (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 This is a bit confusing, but has a simple repro case, which I _think_ lends itself to a possibly very severe bug. When we serialize a byte[] array that is returned from Encoding.GetBytes(""), it will throw an exception if we pass it through the DeflateStream. I stepped through the zlib-helper, and WriteZStream ended up failing when it gets a buf of 0. I've created a repro case, however this _only_ happens when we use Encoding.X.GetBytes("") to generate the byte[] array. If we simply assign byte[] foo = new Byte[0] and attempt to serialize that, everything is absolutely fine. So the worrisome part is how the byte arrays seem to be different somehow internally, where WriteZStream is given a null ptr in the Encoding.GetBytes case. This I imagine is somehow in the BinaryFormatter, which is dishing out this null ptr? Here's the stack trace: Unhandled Exception: System.IO.IOException: Invalid argument(s) WriteInternal at System.IO.Compression.DeflateStream.CheckResult (Int32 result, System.String where) [0x000a7] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/System/System.IO.Compression/DeflateStream.cs:280 at System.IO.Compression.DeflateStream.WriteInternal (System.Byte[] array, Int32 offset, Int32 count) [0x0003a] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/System/System.IO.Compression/DeflateStream.cs:221 at System.IO.Compression.DeflateStream.Write (System.Byte[] src, Int32 src_offset, Int32 count) [0x00067] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/System/System.IO.Compression/DeflateStream.cs:241 at System.IO.Compression.GZipStream.Write (System.Byte[] src, Int32 src_offset, Int32 count) [0x00000] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/System/System.IO.Compression/GZipStream.cs:66 at System.IO.BinaryWriter.Write (System.Byte[] buffer) [0x0002c] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.IO/BinaryWriter.cs:130 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WritePrimitiveTypeArray (System.IO.BinaryWriter writer, Int64 id, System.Array array) [0x000b1] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:554 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray (System.IO.BinaryWriter writer, Int64 id, System.Array array) [0x00077] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:466 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteObjectInstance (System.IO.BinaryWriter writer, System.Object obj, Boolean isValueObject) [0x0004f] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:290 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteQueuedObjects (System.IO.BinaryWriter writer) [0x00005] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:271 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteObjectGraph (System.IO.BinaryWriter writer, System.Object obj, System.Runtime.Remoting.Messaging.Header[] headers) [0x0001f] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:256 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph, System.Runtime.Remoting.Messaging.Header[] headers) [0x000a4] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:230 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph) [0x00000] in /home/strangeloop/src/mono/mono-2.6.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:209 at TestSerialize.MainClass.Main (System.String[] args) [0x00024] in /home/strangeloop/TestSerialize/Main.cs:19 Reproducible: Always Steps to Reproduce: 1. Open up attached test 2. Run Test 3. Actual Results: IO Exception Expected Results: No exception This is a very high priority bug for us, and we are currently having to hack around it in production code. We're always glad to test or run from SVN trunk if we need to. -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
