Skip to content

Fix 14 bugs in /src: memory safety, UB, logic errors, thread safety - #170

Merged
beltoforion merged 1 commit into
beltoforion:masterfrom
jschueller:misc
Jul 3, 2026
Merged

beltoforion merged 1 commit into
beltoforion:masterfrom
jschueller:misc

Conversation

@jschueller

Copy link
Copy Markdown
Collaborator

Critical:

  • Fix use-after-free in mupRelease by deleting outside MU_TRY/MU_CATCH

High:

  • Add missing MU_TRY/MU_CATCH to mupDefineNameChars, mupDefineOprtChars, mupDefineInfixOprtChars to prevent exceptions crossing C ABI boundary
  • Make s_tmpOutBuf, mupGetVar, mupGetExprVar, mupGetConst buffers thread_local to fix data races in multi-threaded usage
  • Fix IsVal returning 0 for all-digit strings (npos not handled)
  • Fix IsHexVal returning success when no hex digits follow "0x"
  • Add null pointer checks for variable pointers in ParseCmdCodeShort

Medium:

  • Fix AsciiDump bounds check to validate string buffer index, not bytecode loop index
  • Skip constant folding when divisor is zero instead of producing inf
  • Add INT_MIN / -1 overflow check in Div and Mod (undefined behavior)
  • Cast to unsigned before shifting in Shr/Shl to avoid UB on negatives
  • Check stIf/stElse non-empty before top() in Finalize to prevent crash on malformed bytecode

Low:

  • Remove unused global variable g_nBulkSize
  • Fix exception safety in ParserCallback::Assign by creating new object before deleting old one

Critical:
- Fix use-after-free in mupRelease by deleting outside MU_TRY/MU_CATCH

High:
- Add missing MU_TRY/MU_CATCH to mupDefineNameChars, mupDefineOprtChars,
  mupDefineInfixOprtChars to prevent exceptions crossing C ABI boundary
- Make s_tmpOutBuf, mupGetVar, mupGetExprVar, mupGetConst buffers
  thread_local to fix data races in multi-threaded usage
- Fix IsVal returning 0 for all-digit strings (npos not handled)
- Fix IsHexVal returning success when no hex digits follow "0x"
- Add null pointer checks for variable pointers in ParseCmdCodeShort

Medium:
- Fix AsciiDump bounds check to validate string buffer index, not
  bytecode loop index
- Skip constant folding when divisor is zero instead of producing inf
- Add INT_MIN / -1 overflow check in Div and Mod (undefined behavior)
- Cast to unsigned before shifting in Shr/Shl to avoid UB on negatives
- Check stIf/stElse non-empty before top() in Finalize to prevent crash
  on malformed bytecode

Low:
- Remove unused global variable g_nBulkSize
- Fix exception safety in ParserCallback::Assign by creating new object
  before deleting old one
@beltoforion
beltoforion merged commit 508cce9 into beltoforion:master Jul 3, 2026
3 checks passed
@jschueller
jschueller deleted the misc branch July 3, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants