Commit 5b59f48
fix(ffi): remove unchecked @ptrCast from cartridge shims (CWE-704) (#290)
## What
Removes the unchecked `@ptrCast` from the cartridge FFI shims
(**CWE-704: Incorrect Type
Conversion or Cast**) across **115 files**.
```zig
- const s = std.mem.span(@as([*:0]const u8, @ptrCast(tool_name)));
+ const s = std.mem.sliceTo(tool_name, 0);
```
`std.mem.sliceTo(ptr, 0)` scans the C string to the first NUL — no
`@ptrCast`, no `[*:0]`
re-typing. The cast asserted a sentinel-terminated type that the `[*c]`
parameter does not
guarantee, so a non-NUL-terminated `tool_name` was undefined behaviour
rather than a
bounded read.
## Why now
Secondary benefit: the previous form depended on `std.mem.spanZ`/`span`
semantics that
changed in Zig 0.14+, so this also unblocks compilation under the CI
pin.
## Scope
- 115 `cartridges/*/ffi/cartridge_shim.zig`
- `ffi/zig/src/cartridge_shim.zig`, `ffi/zig/src/abi_verify.zig`
- Unit tests updated to pass `[*c]const u8` directly instead of
`@ptrCast`-ing a `[*:0]`
Diff: +1833 / −1149. Merges cleanly against `main` (0 conflicts).
## Note on red checks
Required checks on this PR will report `startup_failure` for reasons
**unrelated to this
change**: this repository has `allowed_actions: selected` with an empty
`patterns_allowed`,
so every workflow using a non-GitHub-owned action is refused before any
job starts (20 of
25 workflows). The sibling `boj-server-cartridges` has `allowed_actions:
all` and is fully
green on the same workflow set.
Held as **draft** until that repository-settings fix lands; the code
change itself is
complete and self-contained.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 736915b commit 5b59f48
115 files changed
Lines changed: 1833 additions & 1149 deletions
File tree
- cartridges
- academic-workflow-mcp/ffi
- aerie-mcp/ffi
- affinescript-mcp/ffi
- agent-mcp/ffi
- airtable-mcp/ffi
- arango-mcp/ffi
- aws-mcp/ffi
- bofig-mcp/ffi
- browser-mcp/ffi
- bsp-mcp/ffi
- bug-filing-mcp/ffi
- buildkite-mcp/ffi
- burble-admin-mcp/ffi
- circleci-mcp/ffi
- civic-connect-mcp/ffi
- claude-agents-power-mcp/ffi
- claude-ai-mcp/ffi
- clickhouse-mcp/ffi
- cloud-mcp/ffi
- cloudflare-mcp/ffi
- coderag-mcp/ffi
- codeseeker-mcp/ffi
- comms-mcp/ffi
- conflow-mcp/ffi
- container-mcp/ffi
- crates-mcp/ffi
- dap-mcp/ffi
- database-mcp/ffi
- digitalocean-mcp/ffi
- discord-mcp/ffi
- dns-shield-mcp/ffi
- docker-hub-mcp/ffi
- duckdb-mcp/ffi
- ephapax-mcp/ffi
- feedback-mcp/ffi
- fireflag-mcp/ffi
- fleet-mcp/ffi
- fly-mcp/ffi
- game-admin-mcp/ffi
- gcp-mcp/ffi
- git-mcp/ffi
- github-actions-mcp/ffi
- github-api-mcp/ffi
- gitlab-api-mcp/ffi
- google-docs-mcp/ffi
- google-drive-mcp/ffi
- google-sheets-mcp/ffi
- gossamer-mcp/ffi
- grafana-mcp/ffi
- hackage-mcp/ffi
- hesiod-mcp/ffi
- hetzner-mcp/ffi
- hex-mcp/ffi
- hypatia-mcp/ffi
- iac-mcp/ffi
- idaptik-admin-mcp/ffi
- jira-mcp/ffi
- k8s-mcp/ffi
- k9iser-mcp/ffi
- kategoria-mcp/ffi
- laminar-mcp/ffi
- lang-mcp/ffi
- linear-mcp/ffi
- linode-mcp/ffi
- local-memory-mcp/ffi
- lsp-mcp/ffi
- matrix-mcp/ffi
- ml-mcp/ffi
- model-router-mcp/ffi
- mongodb-mcp/ffi
- neo4j-mcp/ffi
- neon-mcp/ffi
- nesy-mcp/ffi
- notifyhub-mcp/ffi
- notion-mcp/ffi
- npm-registry-mcp/ffi
- observe-mcp/ffi
- obsidian-mcp/ffi
- opam-mcp/ffi
- opendata-mcp/ffi
- opsm-mcp/ffi
- origene-mcp/ffi
- panic-attack-mcp/ffi
- pmpl-mcp/ffi
- postgresql-mcp/ffi
- prometheus-mcp/ffi
- proof-mcp/ffi
- pypi-mcp/ffi
- queues-mcp/ffi
- railway-mcp/ffi
- redis-mcp/ffi
- render-mcp/ffi
- reposystem-mcp/ffi
- research-mcp/ffi
- rokur-mcp/ffi
- sanctify-mcp/ffi
- secrets-mcp/ffi
- sentry-mcp/ffi
- slack-mcp/ffi
- ssg-mcp/ffi
- stapeln-mcp/ffi
- supabase-mcp/ffi
- telegram-mcp/ffi
- todoist-mcp/ffi
- toolchain-mcp/ffi
- turso-mcp/ffi
- typed-wasm-mcp/ffi
- ums-mcp/ffi
- vault-mcp/ffi
- verisimdb-mcp/ffi
- vext-mcp/ffi
- vordr-mcp/ffi
- zotero-mcp/ffi
- ffi/zig/src
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
61 | 67 | | |
62 | | - | |
| 68 | + | |
63 | 69 | | |
64 | 70 | | |
65 | 71 | | |
| |||
124 | 130 | | |
125 | 131 | | |
126 | 132 | | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
137 | | - | |
138 | | - | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | | - | |
141 | | - | |
| 146 | + | |
| 147 | + | |
142 | 148 | | |
0 commit comments