Skip to content

Incorrect ArchiveHeader.Data size #14

@pagran

Description

@pagran

After parsing an object file, I get an invalid ArchiveHeader.Data field with garbage at the end. The ArchiveHeader.Size field is also set incorrectly.

Code:

package main

import (
	"fmt"
	"github.com/Binject/debug/goobj2"
)

func main() {
	const magicHeaderName = "magic/example"

	magicData := make([]byte, 256)

	original, err := goobj2.Parse("a.obj", "main", nil)
	if err != nil {
		panic(err)
	}

	original.ArchiveMembers = append(original.ArchiveMembers, goobj2.ArchiveMember{
		ArchiveHeader: goobj2.ArchiveHeader{
			Name: magicHeaderName,
			Size: int64(len(magicData)),
			Data: magicData,
		},
	})

	if err := original.Write("b.obj"); err != nil {
		panic(err)
	}

	patched, err := goobj2.Parse("b.obj", "main", nil)
	if err != nil {
		panic(err)
	}

	var magicArchive goobj2.ArchiveMember
	for _, member := range patched.ArchiveMembers {
		if member.ArchiveHeader.Name == magicHeaderName {
			magicArchive = member
			break
		}
	}

	if magicArchive.ArchiveHeader.Size != int64(len(magicData)) {
		panic(fmt.Sprintf("real size %d != parsed size %d", magicArchive.ArchiveHeader.Size, len(magicData)))
	}
}

Output:

panic: real size 348 != parsed size 256

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions