• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

polserver / polserver / 39373964661
82%

Build:
DEFAULT BRANCH: master
Ran 20 Oct 2026 05:30AM UTC
Jobs 1
Files 855
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Oct 2026 05:15AM UTC coverage: 81.995% (+0.001%) from 81.994%
39373964661

push

github

web-flow
Fix the UBSan and ASan reports and make sanitizer findings fail CI (#990)

* Read packet fields through memcpy instead of cast pointers
Packet buffers hold u16/u32 fields at odd offsets. Reading or writing
them through reinterpret_cast pointers is undefined
behaviour, which
UBSan reports as misaligned loads and stores. Add
Clib::load_unaligned/store_unaligned and use them in the
packet hooks,
the BPacket get/set methods, custom house packets, speech
tokens and
String::fromUTF16. Copy the proxy protocol header and
payload out of
the receive buffer instead of casting it.

fromUTF16 also read one code unit past `len` when the text
had no null terminator; the bound is now checked first.

* Fix the remaining UBSan reports from the shard tests

- Pool 0xF0 packets per subcommand. A single queue handed a recycled
  party packet (PktOut_F0_Sub01) to the guild query as PktOut_F0_Sub02.
- Compute the client encryption keys in unsigned arithmetic; the formulas overflow int by design.
- Mask the shift count in LoginCrypt::Decrypt_1_25_36 to 5 bits,
  as the client's x86 shift does. Counts of 32 and more are undefined.
  A new test pins the keystream, which is unchanged.
- Give ECryptType and USKILLID a fixed underlying type, so unknown crypt types,
  the -1 "no skill" sentinel and skill ids up to 499 are valid values.

* Turn on more sanitizer checks in CI

Make UBSan fail the job instead of only logging. Enable
libstdc++
assertions in all sanitizer builds and vector
container-overflow
annotations under ASan. Turn on ASan's
stack-use-after-return,
initialization-order and strict string checks.

* Read listing tokens through memcpy instead of cast pointers

StoredTokenDecoder read doubles, ints, uint16_t and
DebugToken from
the program data by casting a pointer at an arbitrary
offset. These
reads are misaligned, which UBSan reports. They now use
Clib::load_unaligned. debug_token_at returns a copy instead
of a
reference into the buffer.

StoredToken is packed. deco... (continued)

143 of 150 new or added lines in 16 files covered. (95.33%)

15 existing lines in 5 files now uncovered.

60301 of 73542 relevant lines covered (82.0%)

727669.95 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
87.96
0.51% pol-core/bscript/compiler/format/StoredTokenDecoder.cpp
3
76.95
0.0% pol-core/pol/network/packethooks.cpp
1
92.61
0.03% pol-core/bscript/bstring.cpp

Coverage Regressions

Lines Coverage ∆ File
7
57.33
-1.56% pol-core/pol/network/client.cpp
4
88.69
-0.9% pol-core/pol/module/npcmod.cpp
2
63.41
0.0% pol-core/pol/mobile/ufacing.cpp
1
43.8
-0.83% pol-core/pol/loaddata.cpp
1
61.36
1.24% pol-core/pol/network/clientthread.cpp
Jobs
ID Job ID Ran Files Coverage
1 39373964661.1 20 Oct 2026 05:30AM UTC 855
82.0
GitHub Action Run
Source Files on build 39373964661
  • Tree
  • List 855
  • Changed 22
  • Source Changed 0
  • Coverage Changed 22
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 41abb940 on github
  • Prev Build on master (#39308646178)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc