(bs []byte)
| 50 | } |
| 51 | |
| 52 | func decodeSectionLengthsCBOR(bs []byte) ([]sectionOffset, error) { |
| 53 | // section-lengths = [* (section-name: tstr, length: uint) ], |
| 54 | |
| 55 | sos := []sectionOffset{} |
| 56 | dec := cbor.NewDecoder(bytes.NewBuffer(bs)) |
| 57 | |
| 58 | n, err := dec.DecodeArrayHeader() |
| 59 | if err != nil { |
| 60 | return nil, fmt.Errorf("bundle: Failed to decode sectionOffset array header: %v", err) |
| 61 | } |
| 62 | |
| 63 | for i := uint64(0); i < n; i += 2 { |
| 64 | name, err := dec.DecodeTextString() |
| 65 | if err != nil { |
| 66 | return nil, fmt.Errorf("bundle.sectionLengths[%d]: Failed to decode sectionOffset name: %v", i, err) |
| 67 | } |
| 68 | |
| 69 | if _, _, exists := FindSection(sos, name); exists { |
| 70 | return nil, fmt.Errorf("bundle.sectionLengths[%d]: Duplicate section in sectionOffset array: %q", i, name) |
| 71 | } |
| 72 | |
| 73 | length, err := dec.DecodeUint() |
| 74 | if err != nil { |
| 75 | return nil, fmt.Errorf("bundle.sectionLengths[%d]: Failed to decode sectionOffset[%q].length: %v", i, name, err) |
| 76 | } |
| 77 | |
| 78 | sos = append(sos, sectionOffset{Name: name, Length: length}) |
| 79 | } |
| 80 | |
| 81 | return sos, nil |
| 82 | } |
| 83 | |
| 84 | var reIsAscii = regexp.MustCompile("^[[:ascii:]]*$") |
| 85 |
no test coverage detected