Skip to content

Commit efa847f

Browse files
authored
Merge pull request #929 from wader/decode-iopanic-cleanup
decode: Cleanup io panic a bit
2 parents d04a846 + ee2ee24 commit efa847f

File tree

6 files changed

+870
-870
lines changed

6 files changed

+870
-870
lines changed

format/asn1/asn1_ber.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ func decodeASN1BERValue(d *decode.D, bib *bitio.Buffer, sb *strings.Builder, par
281281
if bib != nil {
282282
// TODO: helper?
283283
if _, err := bitio.Copy(bib, br); err != nil {
284-
d.IOPanic(err, "bitio.Copy")
284+
d.IOPanic(err, "value", "bitio.Copy")
285285
}
286286
}
287287
if unusedBitsCount > 0 {
@@ -292,7 +292,7 @@ func decodeASN1BERValue(d *decode.D, bib *bitio.Buffer, sb *strings.Builder, par
292292
if bib != nil {
293293
// TODO: helper?
294294
if _, err := bitio.Copy(bib, br); err != nil {
295-
d.IOPanic(err, "bitio.Copy")
295+
d.IOPanic(err, "value", "bitio.Copy")
296296
}
297297
}
298298
case class == classUniversal && tag == universalTypeNull:

format/gzip/gzip.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func gzipDecodeMember(d *decode.D) bitio.ReaderAtSeeker {
114114
readCompressedSize, uncompressedBR, err =
115115
d.FieldReaderRange("uncompressed", d.Pos(), d.BitsLeft(), rFn)
116116
if err != nil {
117-
d.IOPanic(err, "TryFieldReaderRange")
117+
d.IOPanic(err, "uncompressed", "FieldReaderRange")
118118
}
119119
d.FieldRawLen("compressed", readCompressedSize)
120120
crc32W := crc32.NewIEEE()
@@ -149,7 +149,7 @@ func gzipDecode(d *decode.D) any {
149149

150150
cbr, err := bitio.NewMultiReader(brs...)
151151
if err != nil {
152-
d.IOPanic(err, "NewMultiReader")
152+
d.IOPanic(err, "members", "NewMultiReader")
153153
}
154154
dv, _, _ := d.TryFieldFormatBitBuf("uncompressed", cbr, &probeGroup, format.Probe_In{})
155155
if dv == nil {

format/id3/id3v2.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ func textNullLenFn(encoding int, notFoundFixedBytes int) func(d *decode.D) strin
302302
func(v uint64) bool { return v == 0 },
303303
)
304304
if err != nil {
305-
d.IOPanic(err, "textNullLenFn")
305+
d.IOPanic(err, "", "textNullLenFn")
306306
}
307307
if offset < 0 {
308308
if notFoundFixedBytes < 0 {

pkg/decode/decode.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ func (d *D) TryCopyBits(w io.Writer, r bitio.Reader) (int64, error) {
263263
func (d *D) CopyBits(w io.Writer, r bitio.Reader) int64 {
264264
n, err := d.TryCopyBits(w, r)
265265
if err != nil {
266-
d.IOPanic(err, "CopyBits: Copy")
266+
d.IOPanic(err, "", "CopyBits")
267267
}
268268
return n
269269
}
@@ -277,15 +277,15 @@ func (d *D) TryCopy(w io.Writer, r io.Reader) (int64, error) {
277277
func (d *D) Copy(w io.Writer, r io.Reader) int64 {
278278
n, err := d.TryCopy(w, r)
279279
if err != nil {
280-
d.IOPanic(err, "Copy")
280+
d.IOPanic(err, "", "Copy")
281281
}
282282
return n
283283
}
284284

285285
func (d *D) CloneReadSeeker(br bitio.ReadSeeker) bitio.ReadSeeker {
286286
br, err := bitio.CloneReadSeeker(br)
287287
if err != nil {
288-
d.IOPanic(err, "CloneReadSeeker")
288+
d.IOPanic(err, "", "CloneReadSeeker")
289289
}
290290
return br
291291
}
@@ -308,7 +308,7 @@ func (d *D) TryReadAllBits(r bitio.Reader) ([]byte, error) {
308308
func (d *D) ReadAllBits(r bitio.Reader) []byte {
309309
buf, err := d.TryReadAllBits(r)
310310
if err != nil {
311-
d.IOPanic(err, "Bytes ReadAllBytes")
311+
d.IOPanic(err, "", "ReadAllBytes")
312312
}
313313
return buf
314314
}
@@ -350,7 +350,7 @@ func (d *D) FillGaps(r ranges.Range, namePrefix string) {
350350
for i, gap := range gaps {
351351
br, err := bitiox.Range(d.bitBuf, gap.Start, gap.Len)
352352
if err != nil {
353-
d.IOPanic(err, "FillGaps: Range")
353+
d.IOPanic(err, namePrefix, "bitiox.Range")
354354
}
355355

356356
v := &Value{
@@ -380,8 +380,8 @@ func (d *D) Fatalf(format string, a ...any) {
380380
panic(DecoderError{Reason: fmt.Sprintf(format, a...), Pos: d.Pos()})
381381
}
382382

383-
func (d *D) IOPanic(err error, op string) {
384-
panic(IOError{Err: err, Pos: d.Pos(), Op: op})
383+
func (d *D) IOPanic(err error, name string, op string) {
384+
panic(IOError{Err: err, Name: name, Pos: d.Pos(), Op: op})
385385
}
386386

387387
// TryBits reads nBits bits from buffer
@@ -543,7 +543,7 @@ func (d *D) TryPeekFind(nBits int, seekBits int64, maxLen int64, fn func(v uint6
543543
func (d *D) PeekFind(nBits int, seekBits int64, maxLen int64, fn func(v uint64) bool) (int64, uint64) {
544544
peekBits, v, err := d.TryPeekFind(nBits, seekBits, maxLen, fn)
545545
if err != nil {
546-
d.IOPanic(err, "PeekFind: TryPeekFind")
546+
d.IOPanic(err, "", "PeekFind")
547547
}
548548
if peekBits == -1 {
549549
d.Errorf("peek not found")
@@ -771,7 +771,7 @@ func (d *D) TrySeekRel(delta int64, fns ...func(d *D)) (int64, error) {
771771
func (d *D) SeekRel(delta int64, fns ...func(d *D)) int64 {
772772
n, err := d.trySeekAbs(d.Pos()+delta, fns...)
773773
if err != nil {
774-
d.IOPanic(err, "SeekRel")
774+
d.IOPanic(err, "", "SeekRel")
775775
}
776776
return n
777777
}
@@ -785,7 +785,7 @@ func (d *D) TrySeekAbs(pos int64, fns ...func(d *D)) (int64, error) {
785785
func (d *D) SeekAbs(pos int64, fns ...func(d *D)) int64 {
786786
n, err := d.trySeekAbs(pos, fns...)
787787
if err != nil {
788-
d.IOPanic(err, "SeekAbs")
788+
d.IOPanic(err, "", "SeekAbs")
789789
}
790790
return n
791791
}
@@ -955,7 +955,7 @@ func (d *D) RangeFn(firstBit int64, nBits int64, fn func(d *D)) int64 {
955955
// TODO: do some kind of DecodeLimitedLen/RangeFn?
956956
br := d.BitBufRange(0, firstBit+nBits)
957957
if _, err := br.SeekBits(firstBit, io.SeekStart); err != nil {
958-
d.IOPanic(err, "RangeFn: SeekAbs")
958+
d.IOPanic(err, "", "RangeFn: SeekAbs")
959959
}
960960

961961
nd := *d
@@ -979,7 +979,7 @@ func (d *D) Format(group *Group, inArg any) any {
979979
ReadBuf: d.readBuf,
980980
})
981981
if dv == nil || dv.Errors() != nil {
982-
d.IOPanic(err, "Format: decode")
982+
d.IOPanic(err, "", "Format: decode")
983983
}
984984

985985
switch vv := dv.V.(type) {
@@ -992,7 +992,7 @@ func (d *D) Format(group *Group, inArg any) any {
992992
}
993993

994994
if _, err := d.bitBuf.SeekBits(dv.Range.Len, io.SeekCurrent); err != nil {
995-
d.IOPanic(err, "Format: SeekRel")
995+
d.IOPanic(err, "", "Format: SeekRel")
996996
}
997997

998998
return v
@@ -1015,7 +1015,7 @@ func (d *D) TryFieldFormat(name string, group *Group, inArg any) (*Value, any, e
10151015

10161016
d.AddChild(dv)
10171017
if _, err := d.bitBuf.SeekBits(dv.Range.Len, io.SeekCurrent); err != nil {
1018-
d.IOPanic(err, "TryFieldFormat: SeekRel")
1018+
d.IOPanic(err, name, "TryFieldFormat: SeekRel")
10191019
}
10201020

10211021
return dv, v, err
@@ -1024,7 +1024,7 @@ func (d *D) TryFieldFormat(name string, group *Group, inArg any) (*Value, any, e
10241024
func (d *D) FieldFormat(name string, group *Group, inArg any) (*Value, any) {
10251025
dv, v, err := d.TryFieldFormat(name, group, inArg)
10261026
if dv == nil || dv.Errors() != nil {
1027-
d.IOPanic(err, "FieldFormat: TryFieldFormat")
1027+
d.IOPanic(err, name, "FieldFormat: TryFieldFormat")
10281028
}
10291029
return dv, v
10301030
}
@@ -1054,7 +1054,7 @@ func (d *D) TryFieldFormatLen(name string, nBits int64, group *Group, inArg any)
10541054

10551055
d.AddChild(dv)
10561056
if _, err := d.bitBuf.SeekBits(nBits, io.SeekCurrent); err != nil {
1057-
d.IOPanic(err, "TryFieldFormatLen: SeekRel")
1057+
d.IOPanic(err, name, "TryFieldFormatLen: SeekRel")
10581058
}
10591059

10601060
return dv, v, err
@@ -1063,7 +1063,7 @@ func (d *D) TryFieldFormatLen(name string, nBits int64, group *Group, inArg any)
10631063
func (d *D) FieldFormatLen(name string, nBits int64, group *Group, inArg any) (*Value, any) {
10641064
dv, v, err := d.TryFieldFormatLen(name, nBits, group, inArg)
10651065
if dv == nil || dv.Errors() != nil {
1066-
d.IOPanic(err, "FieldFormatLen: TryFieldFormatLen")
1066+
d.IOPanic(err, name, "FieldFormatLen: TryFieldFormatLen")
10671067
}
10681068
return dv, v
10691069
}
@@ -1100,7 +1100,7 @@ func (d *D) TryFieldFormatRange(name string, firstBit int64, nBits int64, group
11001100
func (d *D) FieldFormatRange(name string, firstBit int64, nBits int64, group *Group, inArg any) (*Value, any) {
11011101
dv, v, err := d.TryFieldFormatRange(name, firstBit, nBits, group, inArg)
11021102
if dv == nil || dv.Errors() != nil {
1103-
d.IOPanic(err, "FieldFormatRange: TryFieldFormatRange")
1103+
d.IOPanic(err, name, "FieldFormatRange: TryFieldFormatRange")
11041104
}
11051105

11061106
return dv, v
@@ -1130,7 +1130,7 @@ func (d *D) TryFieldFormatBitBuf(name string, br bitio.ReaderAtSeeker, group *Gr
11301130
func (d *D) FieldFormatBitBuf(name string, br bitio.ReaderAtSeeker, group *Group, inArg any) (*Value, any) {
11311131
dv, v, err := d.TryFieldFormatBitBuf(name, br, group, inArg)
11321132
if dv == nil || dv.Errors() != nil {
1133-
d.IOPanic(err, "FieldFormatBitBuf: TryFieldFormatBitBuf")
1133+
d.IOPanic(err, name, "FieldFormatBitBuf: TryFieldFormatBitBuf")
11341134
}
11351135

11361136
return dv, v
@@ -1141,7 +1141,7 @@ func (d *D) FieldFormatBitBuf(name string, br bitio.ReaderAtSeeker, group *Group
11411141
func (d *D) FieldRootBitBuf(name string, br bitio.ReaderAtSeeker, sms ...scalar.BitBufMapper) *Value {
11421142
brLen, err := bitiox.Len(br)
11431143
if err != nil {
1144-
d.IOPanic(err, "br Len")
1144+
d.IOPanic(err, name, "br Len")
11451145
}
11461146

11471147
v := &Value{}
@@ -1188,17 +1188,17 @@ func (d *D) FieldStructRootBitBufFn(name string, br bitio.ReaderAtSeeker, fn fun
11881188
func (d *D) FieldFormatReaderLen(name string, nBits int64, fn func(r io.Reader) (io.ReadCloser, error), group *Group) (*Value, any) {
11891189
br, err := d.TryBitBufLen(nBits)
11901190
if err != nil {
1191-
d.IOPanic(err, "FieldFormatReaderLen: BitBufLen")
1191+
d.IOPanic(err, name, "FieldFormatReaderLen: BitBufLen")
11921192
}
11931193

11941194
bbBR := bitio.NewIOReader(br)
11951195
r, err := fn(bbBR)
11961196
if err != nil {
1197-
d.IOPanic(err, "FieldFormatReaderLen: fn")
1197+
d.IOPanic(err, name, "FieldFormatReaderLen: fn")
11981198
}
11991199
rBuf, err := io.ReadAll(r)
12001200
if err != nil {
1201-
d.IOPanic(err, "FieldFormatReaderLen: ReadAll")
1201+
d.IOPanic(err, name, "FieldFormatReaderLen: ReadAll")
12021202
}
12031203
rBR := bitio.NewBitReader(rBuf, -1)
12041204

@@ -1245,7 +1245,7 @@ func (d *D) FieldReaderRange(name string, startBit int64, nBits int64, fn func(r
12451245
func (d *D) FieldReaderRangeFormat(name string, startBit int64, nBits int64, fn func(r io.Reader) io.Reader, group *Group, inArg any) (int64, bitio.ReaderAtSeeker, *Value, any) {
12461246
cz, rBR, dv, v, err := d.TryFieldReaderRangeFormat(name, startBit, nBits, fn, group, inArg)
12471247
if err != nil {
1248-
d.IOPanic(err, "TryFieldReaderRangeFormat")
1248+
d.IOPanic(err, name, "TryFieldReaderRangeFormat")
12491249
}
12501250
return cz, rBR, dv, v
12511251
}
@@ -1268,7 +1268,7 @@ func (d *D) TryFieldValue(name string, fn func() (*Value, error)) (*Value, error
12681268
func (d *D) FieldValue(name string, fn func() *Value) *Value {
12691269
v, err := d.TryFieldValue(name, func() (*Value, error) { return fn(), nil })
12701270
if err != nil {
1271-
d.IOPanic(err, "FieldValue: TryFieldValue")
1271+
d.IOPanic(err, name, "FieldValue: TryFieldValue")
12721272
}
12731273
return v
12741274
}

0 commit comments

Comments
 (0)