halkyon/apps/todo/halkyon_todo_flutter
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tizian 「ティツィアーン」 290f584329
fix(app): a saved secret is 0600 on Apple's Arm too, and macOS saves at all
The short reading's H1: open(2) takes its mode among variable arguments,
which Apple's Arm passes on the stack, so bound with three fixed ones it
read the mode from whatever the stack held: a phrase or recovery codes
saved on an Apple silicon Mac could be readable by everyone. It is bound
as variadic now (VarArgs), and every file written is made 0600 through its
descriptor (fchmod), checked.

M1: macOS's sandbox lets an app reach the file the person chose and
nothing beside it, so the file made beside it was refused and nothing
could be saved; Learn's sandbox allowed reading chosen files alone, so its
exports never saved on macOS either. There, writePrivately now writes the
chosen file itself (decided by the developer on 21 Oct): opened without
following a link or waiting on a pipe and without truncating, refused with
nothing written unless fstat finds a file of the own user's, then made
0600 and emptied. Both apps' entitlements grant reading and writing the
files the person chooses. Linux keeps the new file renamed over it.

The reading's nits: the buffer is wiped whatever happens, an interrupted
call is made again (EINTR), the file made beside a chosen one is named
apart from it so a name as long as a folder takes still saves, the folder
is flushed after the rename, and Linux reads a file's type and owner with
statx, alike on every architecture, where __lxstat's version differed
(riscv64's was wrong). The test of another user's file is skipped as root.
The in-place path is tested on Linux; none of it has run on a Mac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-23 14:13:04 +02:00
..
android fix(app): secrets are kept out of screenshots and the recent apps 2026-10-23 14:12:58 +02:00
assets feat(todo): the app on halkyon_app, with its own icon 2026-10-22 18:11:06 +02:00
ios feat(todo): the app on halkyon_app, with its own icon 2026-10-22 18:11:06 +02:00
lib fix(app): http:// and https:// on one host are one account on the device 2026-10-23 14:13:01 +02:00
linux feat(app): sign in with a password and TOTP on the device 2026-10-23 14:12:41 +02:00
macos fix(app): a saved secret is 0600 on Apple's Arm too, and macOS saves at all 2026-10-23 14:13:04 +02:00
test feat(app): sign in with a password and TOTP on the device 2026-10-23 14:12:41 +02:00
windows feat(app): secrets kept out of screenshots on macOS and Windows too 2026-10-23 14:13:01 +02:00
.gitignore chore: Halkyon Todo's scaffold joins the repository in apps/todo 2026-10-22 18:11:03 +02:00
.metadata chore: Halkyon Todo's scaffold joins the repository in apps/todo 2026-10-22 18:11:03 +02:00
analysis_options.yaml feat(todo): the app on halkyon_app, with its own icon 2026-10-22 18:11:06 +02:00
l10n.yaml feat(todo): the app on halkyon_app, with its own icon 2026-10-22 18:11:06 +02:00
LICENSE docs(todo): what Todo is now, and its licences 2026-10-22 18:11:06 +02:00
pubspec.yaml feat(todo): the app on halkyon_app, with its own icon 2026-10-22 18:11:06 +02:00
README.md docs(todo): what Todo is now, and its licences 2026-10-22 18:11:06 +02:00

halkyon_todo_flutter

Halkyon Todo's app, on halkyon_app and halkyon_ui. See Todo's README.