[Mono-bugs] [Bug 434620] New: Structure Corruption

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Sun Oct 12 18:53:20 EDT 2008


https://bugzilla.novell.com/show_bug.cgi?id=434620


           Summary: Structure Corruption
           Product: Mono: Runtime
           Version: 2.0
          Platform: x86-64
               URL: http://sourceforge.net/projects/oogl/
        OS/Version: Ubuntu
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: JIT
        AssignedTo: lupus at novell.com
        ReportedBy: jmichels at bluefintrading.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Community User


While using a copy construction in the following code, the resultant structure
data members are corrupted.

// From OOGL Files.cs starting at line 129
// Console.WriteLine(...) added for clarity
for(int i = 0; i < numVertices; i++)

{
    Vertex v = this.vertices[i];
    Console.WriteLine(v);
    this.vertices[i] = new Vertex(r, v, vertexSubVersion);
    Console.WriteLine(this.vertices[i] + "\n");
}

produces the following sample output.

Vertex flags=0,vertex=(2.794012, 0.899902,
-0.273263),referenceCount=2,boneIds=(19,-1,-1,-1),weights=(1,0,0,0)
Vertex flags=192,vertex=(0, 2.794012,
0.899902),referenceCount=233,boneIds=(33,-1,-1,-1),weights=(0,0,0,1)

The copy constructor code is as follows. The first 4 lines are straight 1:1
member variable copies. Yet, they are modified / corrupted in the returned
structure. It appears the byte alignment is off by 4 bytes during the copy.

public Vertex(BinaryReader r, Vertex v, int subVersion)

{

    flags = v.flags;

    vertex = v.vertex;

    boneId0 = v.boneId0;

    referenceCount = v.referenceCount;



    boneId1 = r.ReadSByte();

    boneId2 = r.ReadSByte();

    boneId3 = r.ReadSByte();



    weight0 = r.ReadByte() / 255.0f;

    weight1 = r.ReadByte() / 255.0f;

    weight2 = r.ReadByte() / 255.0f;



    if (subVersion == 1) return;



    r.ReadUInt32(); // extra data subversion 2+

}


Code to reproduce the bug can be found at the following link
http://sourceforge.net/projects/oogl/


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list