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

Reply via email to