fix: critical bug fixes from codebase audit#352
Closed
code-by-mahereddy wants to merge 1 commit into
Closed
Conversation
DeusData
pushed a commit
that referenced
this pull request
May 30, 2026
- str_util: add cbm_validate_project_name() — strict allowlist ([A-Za-z0-9._-], no leading dot, no '..', no path separators) so a project name can never escape the cache directory. - store/mcp/http_server: validate project names (fail-closed) before interpolating them into .db file paths (path-traversal hardening; defense-in-depth for the wrong-path class in #331). - store: fix use-after-free in the LIKE pool — like_pool_add() frees its argument when the pool is full, so capture pool_was_full before the add and skip the subsequent bind that would touch the freed pointer (two call sites). Also fix the find_edges_by_url_path LIKE pattern (stray double-percent) and add NULL guards to cbm_store_checkpoint / cbm_store_node_degree / cbm_store_restore_from. - mcp: emit "result": null when a JSON-RPC response would otherwise carry neither result nor error (2.0 compliance); bounds-check the project-name accumulator against truncation. - http_server: JSON-escape directory and parent names in the browse endpoint to prevent stored-XSS/JSON injection via crafted names. - cypher: expr_free now recurses on EXPR_FREE_STACK overflow instead of silently dropping subtrees (memory leak). Distilled from #352 onto current main (store.c like-pool hunk re-resolved against the v0.7.0 search refactor; restored cypher.c EOF newline).
Owner
|
Thank you, @code-by-mahereddy! 🙏 I gave this a careful line-by-line security review (it touches several sensitive files, so I wanted to be thorough) and every change held up — these are real, well-targeted fixes:
The PR branch had diverged from Landed in 21c73b5. Verified locally: build clean, all 3,617 tests pass including the validation-path tests. This strengthens the security posture tracked in #397 and adds defense-in-depth for #331. Genuinely excellent audit work — thank you! 🙏 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug Fixes from Codebase Audit
Critical
store.c): Double-percent format string produced wrong SQL LIKE pattern, makingfind_edges_by_url_pathalways failstore.c):like_pool_addcould free pointer, but subsequent code still used itcypher.c):expr_freesilently dropped subtrees when 128-entry stack overflowedHigh
store.c,mcp.c,http_server.c): Project names were not validated before interpolation into file pathsmcp.c): Response missing bothresultanderrorkeys when both were NULLmcp.c):collect_db_project_namesoffset could exceed buffer size on truncationhttp_server.c): Directory names injected raw into JSON without escapingstore.c): Missing NULL guards oncbm_store_checkpoint,cbm_store_node_degree,cbm_store_restore_fromNew utility
cbm_validate_project_name()instr_util.c/h— validates project names are safe for file path constructionAll fixes verified with successful build (
make -f Makefile.cbm cbmwith -Werror).