Skip to content

Fix security scan findings, review web tree, fix accessibility of the 1.0 views - #21

Merged
bakirgdev merged 4 commits into
mainfrom
1-0/p14-security-a11y
Oct 15, 2026
Merged

bakirgdev merged 4 commits into
mainfrom
1-0/p14-security-a11y

Conversation

@bakirgdev

Copy link
Copy Markdown
Owner

Intent

CrocApp stalled at v0.9.9. This PR (P14 of the 1.0 plan) is the security and accessibility pass: fix the findings of the whole-repo security scan, review the web/ tree, and make the 1.0 views hold up at large text sizes and under VoiceOver.

Requirements

  • R11 Security review before release: claude-security scan findings fixed (glob escaping, queued answers, path splitting, size overflow); web/ tree reviewed by a subagent (findings W1-W10), W2 fixed (/r/ page no longer claims end-to-end encryption), the rest recorded in docs/known-issues.md.
  • R16 Known-issues triage: scan findings fixed or recorded. "Blocking release" still holds one item, export compliance, kept there by plan until step 58; it must be empty at tag time (B27 checks).
  • R27, R29 Accessibility of the 1.0 views at large Dynamic Type and under VoiceOver (FileRow, SendView, ReceiveView, AdvancedSettingsView, TransferStatusView, others).

Plan deviations

  • The web/ review was done by a subagent, not a second claude-security session (R11 names no tool). The owner may run a panel before the tag.
  • Export compliance entry stays under "Blocking release" by plan (see R16).
  • iPhone VoiceOver and Accessibility Inspector audit (O12) is an owner step.

Review

Two reviews. Second at HEAD b387c6c: Important 0, Nit 5 listed (8 unlisted), none blocking. The first review's one Important (the web/ area unreviewed) is fixed. Nits not fixed: a known-issues.md W8 entry that wrongly says the Pages cancel step does nothing (GitHub docs accept a commit SHA), "declined" message after a v11 reconnect refusal, line-break file name mapped to an Advanced setting error, 60 pt staged row vs 48 pt token, disabled controls without hints.

Verification (rerun at b387c6c in the ship session)

  • Go: build, vet, golangci-lint run (0 issues), go tool govulncheck -show verbose (0 affected), go test -race ./... pass (also with -count=1).
  • scripts/format-swift.sh --lint: exit 0. scripts/build-xcframework.sh: exit 0.
  • xcodebuild build: CrocApp for generic iOS, iOS Simulator, macOS, and CrocApp Direct: BUILD SUCCEEDED; only appintentsmetadataprocessor tool messages, no warning: from our sources.
  • swift test --package-path CrocKit: 35 tests passed. xcodebuild test -scheme CrocApp -destination 'platform=macOS': TEST SUCCEEDED.
  • scripts/verify-interop.sh: first run failed in transport relay: wrapper send of 130 MiB (public relay 1.getcroc.com:9009, wrapper log stalled at waiting; likely relay flake, not investigated); rerun on the same tree: ALL INTEROP CHECKS PASSED.
  • scripts/verify-app-mac.sh: all MAC-*-OK. verify-app-sim.sh: SIM-INTEROP-OK. verify-share-sim.sh: SHARE-SIM-OK.
  • Greps: no MARKETING_VERSION/CURRENT_PROJECT_VERSION, no schollz.com, contains(" count 0 in TransferController.swift.
  • Not verified: CI on this PR (pending), /r/ page in a browser, VoiceOver and Inspector audit, gh-based and release-workflow Proof rows owned by other PRs.

…eOver

At the largest accessibility text size, History's metadata collapsed into
one-character columns and a staged file row pushed Send wider than the
screen. History now stacks its row and Send scrolls, with its padding inside
the scroll view so the Send as link switch is not clipped. FileRow puts the
size under the name, and Add Files and Add Folder stack when they do not fit.

VoiceOver: field errors and footnotes are hints on their controls, disabled
controls say why, and results and the menu-bar clipboard notice are
announced. The menu-bar progress reads a percent and a direction, History
reads Sent or Received and a status title, and decorative icons and spinners
are hidden. An invalid code is explained in words, small text buttons on
Receive get 44 pt targets on iOS, and the number pad gets a Done button.

known-issues.md: the Inspector and VoiceOver audit stays an owner step, with
the full view list, and the two findings not fixed (the 38 pt paste button,
fixed-size glyphs) are recorded.
… size overflow

A picked file named with '*' was expanded by croc's filepath.Glob, so a send
also leaked every matching file beside it. Picked paths are now escaped and
match only themselves.

After a manual accept, crocmobile queued "y" answers for the unzip and
empty-folder prompts. croc v11 re-runs the accept prompt after a reconnect,
so a sender could get an unseen file list accepted with Overwrite. Only "n"
is queued now: Replace still overwrites files, but keeps existing members of
a zipped folder, and a reconnect after a manual accept ends as refused.

A path containing a line break split into extra send paths across the
bridge, and the Go side trimmed each path, so "report.pdf " sent
"report.pdf". CrocEngine refuses line breaks, the Go side splits without
trimming, and received or shared names with control characters are unsafe.

Sender-declared sizes could overflow the progress sums and trap the app.
Every reported size and sum is capped at 1 PiB.
The scan of a7a87cf left out web/. A read-only review found no injection sink
and no High finding. The receive-link page no longer calls the code encrypted,
and both docs pages say the browser path sends it to getcroc.com in a query
string. The other findings are in known-issues.md.
…e v7.0.0 commit

codeload and the API tarball return 404 for the v7.0.0 (b7ad1da) and v6.5.0 commits, so the macOS and interop jobs fail in Set up job. The v6.4.0 commit downloads.
@bakirgdev
bakirgdev merged commit aa60fe6 into main Oct 15, 2026
14 of 15 checks passed
@bakirgdev
bakirgdev deleted the 1-0/p14-security-a11y branch October 15, 2026 05:27
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.

1 participant