Commit f1e1c48
committed
Take a defensive copy of expected checks so verifiers are independent
The JWTVerifier constructor wrapped the builder's live ArrayList with
Collections.unmodifiableList (a view, not a copy), and build(Clock) appended the
mandatory exp/nbf/iat checks to that same list. Calling build() twice on one
BaseVerification therefore appended a second set of mandatory checks AND
retroactively mutated the first, already-returned (and documented as immutable and
thread-safe) verifier.
Build the mandatory checks into a fresh list inside build() instead of mutating the
builder's field, and take a defensive copy in the constructor. build() is now
idempotent and each verifier owns an independent snapshot. Single-build behaviour
and all existing check counts are unchanged.1 parent b5e3eb9 commit f1e1c48
2 files changed
Lines changed: 26 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
34 | 36 | | |
35 | 37 | | |
36 | 38 | | |
| |||
285 | 287 | | |
286 | 288 | | |
287 | 289 | | |
288 | | - | |
289 | | - | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
290 | 295 | | |
291 | 296 | | |
292 | 297 | | |
| |||
299 | 304 | | |
300 | 305 | | |
301 | 306 | | |
302 | | - | |
| 307 | + | |
303 | 308 | | |
304 | 309 | | |
305 | 310 | | |
306 | 311 | | |
307 | | - | |
| 312 | + | |
308 | 313 | | |
309 | | - | |
| 314 | + | |
310 | 315 | | |
311 | 316 | | |
312 | | - | |
| 317 | + | |
313 | 318 | | |
314 | 319 | | |
315 | 320 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1325 | 1325 | | |
1326 | 1326 | | |
1327 | 1327 | | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
1328 | 1342 | | |
0 commit comments