Commit 76f94e8
committed
fix AR mime-type reader error wrap to preserve errors.Is identity
The wrap at pkg/handlers/ar.go:101 used %v on the inner error returned
from newMimeTypeReader, dropping its identity from the errors.Is chain.
The reachability path is bufReader.Peek -> io.SectionReader over the
deb library reader -> BufferedReadSeeker.ReadAt -> the original io.Reader
passed to HandleFile. For HTTP/GCS-backed source readers, parent-context
cancellation surfaces as a Read error whose chain satisfies
errors.Is(err, context.DeadlineExceeded). The %v strips that inner
identity, so isFatal at handlers.go:482 misclassifies the wrapped error
as a non-fatal warning.
Switch to %w to match the same-shape fix already applied at
pkg/handlers/default.go:137 and pkg/handlers/ar.go:109. Blast radius is
lower than ar.go:109 because processARFiles checks ctx.Done() at the top
of each loop iteration, so the next iteration backstops cancellation.
The fix is a symmetry/correctness change that lets isFatal classify the
wrapped error against its actual cause.
Add a regression test that drives processARFiles directly with a
crafted *deb.Ar whose first entry's data section returns the target
error from ReadAt. The table covers context.DeadlineExceeded,
context.Canceled, and io.ErrUnexpectedEOF (io.EOF is filtered inside
newMimeTypeReader and never reaches the wrap site). Each case asserts
the outer ErrProcessingWarning wrap is preserved, the inner cause is
inspectable via errors.Is, and isFatal classifies based on the inner
cause.1 parent 99dc7bd commit 76f94e8
2 files changed
Lines changed: 131 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
| 101 | + | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
4 | 8 | | |
5 | 9 | | |
6 | 10 | | |
7 | 11 | | |
8 | 12 | | |
| 13 | + | |
| 14 | + | |
9 | 15 | | |
10 | 16 | | |
11 | 17 | | |
| |||
34 | 40 | | |
35 | 41 | | |
36 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
0 commit comments