- Expired records are now properly removed from bbolt databases (#848).
- Fix hanging on service restart (#853)
Added
Anubis now supports the missingHeader
to assert the absence of headers in requests.
New locales
Anubis now supports these new languages:
Fixes
Fix "error: can't get challenge" when details about a challenge can't be found in the server side state
v1.21.0 changed the core challenge flow to maintain information about challenges on the server side instead of only doing them via stateless idempotent generation functions and relying on details to not change. There was a subtle bug introduced in this change: if a client has an unknown challenge ID set in its test cookie, Anubis will clear that cookie and then throw an HTTP 500 error.
This has been fixed by making Anubis throw a new challenge page instead.
Fix event loop thrashing when solving a proof of work challenge
Previously the "fast" proof of work solver had a fragment of JavaScript that attempted to only post an update about proof of work progress to the main browser window every 1024 iterations. This fragment of JavaScript was subtly incorrect in a way that passed review but actually made the workers send an update back to the main thread every iteration. This caused a pileup of unhandled async calls (similar to a socket accept() backlog pileup in Unix) that caused stack space exhaustion.
This has been fixed in the following ways:
- The complicated boolean logic has been totally removed in favour of a worker-local iteration counter.
- The progress bar is updated by worker
0
instead of all workers.
Hopefully this should limit the event loop thrashing and let ia32 browsers (as well as any environment with a smaller stack size than amd64 and aarch64 seem to have) function normally when processing Anubis proof of work challenges.
Fix potential memory leak when discovering a solution
In some cases, the parallel solution finder in Anubis could cause all of the worker promises to leak due to the fact the promises were being improperly terminated. This was fixed by having Anubis debounce worker termination instead of allowing it to potentially recurse infinitely.
What's Changed
- docs(known-instances): update list of known instances by @lotharsm in #847
- fix(cmd/anubis): add signal handling to metrics server by @EmRowlands in #856
- test: add i18n smoke test by @Xe in #858
- test(ssh-ci): deflake SSH CI with exponential backoff by @Xe in #859
- Fix broken BBolt database cleanup process by @thenickdude in #848
- fix(localization): untranslated string in Filipino language by @hankskyjames777 in #850
- feat(localization): Add Czech language translation by @xmorave2 in #849
- feat(expressions): add missingHeader function to bot environment by @Xe in #870
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #871
- build(deps-dev): bump the npm group with 3 updates by @dependabot[bot] in #872
- build(deps): bump the gomod group with 6 updates by @dependabot[bot] in #873
- Revert "build(deps): bump the gomod group with 6 updates" by @JasonLovesDoggo in #874
- Remove duplicated string in Filipino language file by @searinminecraft in #875
- fix(web): amend future leak on proof of work solution by @Xe in #879
- fix(web/fast): remove event loop thrashing by @Xe in #880
- Update pt-BR.json by @HQuest in #878
- fix(lib): fix challenge issuance logic by @Xe in #881
- Add Finnish localization by @ZerionSeven in #863
- feat: Russian localization for Anubis by @Xe in #882
- feat(localization): Add in Bokmål and Nynorsk translations by @turtlegarden in #855
- chore: release v1.21.1 by @Xe in #887
New Contributors
- @EmRowlands made their first contribution in #856
- @thenickdude made their first contribution in #848
- @hankskyjames777 made their first contribution in #850
- @xmorave2 made their first contribution in #849
- @HQuest made their first contribution in #878
- @ZerionSeven made their first contribution in #863
- @turtlegarden made their first contribution in #855
Full Changelog: v1.21.0...v1.21.1