https://bugzilla.novell.com/show_bug.cgi?id=641821
https://bugzilla.novell.com/show_bug.cgi?id=641821#c0 Summary: [PATCH] version tolerant serialization fails with missing primitive typed members Classification: Mono Product: Mono: Class Libraries Version: SVN Platform: All OS/Version: All Status: NEW Severity: Normal Priority: P5 - None Component: CORLIB AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/5343 (KHTML, like Gecko) Chrome/6.0.472.62 Safari/534.3 The attached patch includes an extension to the VTS tests that Andrés added recently, which tests deserializing an Address object that contains a member of type int called 'Id', as well as a fix to System.Runtime.Serialization.Formatters.Binary.ObjectReader to make that test pass. It turns out that while the member was properly being ignored when the Address type in the current domain doesn't have that member, the parser was not seeking past the value to the next block in the stream, so it would try to read value as the type metadata of the next block, which would normally be a BinaryCommon.BinaryElement enum. We tested deserializing an object serialized with Microsoft's implementation to make sure that mono's ObjectWriter class wasn't writing bad data. The test case works fine with Microsoft's implementation. The patch to ObjectReader just has it read the value anyway and throw it away if we know it's a primitive type, so that we seek to the next block of the object stream. Reproducible: Always Actual Results: Without the patch to ObjectReader.cs, you get the following traceback when running make -C mcs/class/corlib run-test-vts: Unhandled Exception: System.Runtime.Serialization.SerializationException: Unexpected binary element: 0 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, System.IO.BinaryReader reader, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info) [0x00000] in <filename unknown>:0 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadValue (System.IO.BinaryReader reader, System.Object parentObject, Int64 parentObjectId, System.Runtime.Serialization.SerializationInfo info, System.Type valueType, System.String fieldName, System.Reflection.MemberInfo memberInfo, System.Int32[] indices) [0x00000] in <filename unknown>:0 Note that the unexpected binary element "0" is from the value of the Id member in the stream, which in the test is set to 0. If it's set to another value, say, 9, the parser will get confused and think it's reading a BinaryElement.ObjectReference, and then crash later. If this patch looks safe, it can be pulled from my git repo. -- Configure bugmail: https://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
