in mfg/parse.go [72:107]
func parseMeta(bin []byte) (Meta, error) {
if len(bin) < META_FOOTER_SZ {
return Meta{}, errors.Errorf(
"binary too small to accommodate meta footer; "+
"bin-size=%d ftr-size=%d", len(bin), META_FOOTER_SZ)
}
ftr, _, err := parseMetaFooter(bin[len(bin)-META_FOOTER_SZ:])
if err != nil {
return Meta{}, err
}
if int(ftr.Size) > len(bin) {
return Meta{}, errors.Errorf(
"binary too small to accommodate meta region; "+
"bin-size=%d meta-size=%d", len(bin), ftr.Size)
}
ftrOff := len(bin) - META_FOOTER_SZ
off := len(bin) - int(ftr.Size)
tlvs := []MetaTlv{}
for off < ftrOff {
tlv, sz, err := parseMetaTlv(bin[off:])
if err != nil {
return Meta{}, err
}
tlvs = append(tlvs, tlv)
off += sz
}
return Meta{
Tlvs: tlvs,
Footer: ftr,
}, nil
}