• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IJHack / QtPass / 35721681840
93%

Build:
DEFAULT BRANCH: main
Ran 22 Sep 2026 11:38AM UTC
Jobs 1
Files 114
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 Sep 2026 11:28AM UTC coverage: 92.98% (+0.04%) from 92.937%
35721681840

push

github

web-flow
The staged write checks it placed the file it wrote; re-encryption reports once (#1906)

* The staged write checks it placed the file it wrote; re-encryption reports once

After the rename, Util::stageFileReplacing() (the primitive behind
writeFileReplacing() and copyFileReplacing(), now public so the window can be
tested) opens the object under the name without following and compares it,
by device and inode, with the temporary it filled. A file swapped under the
temporary's name before the rename, a hard link to something of the user's
say, is a regular file to every check by name and used to become the entry;
it is reported now, and a name the write itself made is removed again.
Without replacing, the name is made with linkat(2) and no flags: link(2)
follows a symlink at the source on macOS and the BSDs (XNU and FreeBSD pass
AT_SYMLINK_FOLLOW), which would have made the entry a second name for the
link's target.

reencryptSingleFile() hands the reason a ciphertext could not be placed back
to the run, which lists it in its one summary: a folder that cannot be
written failed every entry in it with its own modal dialog before the summary.

recoverReencryptLeftovers() leaves a temporary modified within the hour
alone: on a shared store it may be another QtPass's write in flight, and
unlinking it would fail that write for nothing.

Tests: linkat does not follow a planted symlink; a filler that plays the
co-writer swaps the temporary for a hard link or a symlink and neither lands
(red with the identity comparison removed); systematic failures produce one
dialog; a recent staged temporary survives the recovery pass; the leftover
assertions look at hidden names too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JuQsrHonihp1nARE7bzstc

* lupdate + best-effort translations for the swapped-file message

"%1 was swapped for another file while it was written." replaces "%1 was
replaced by a link while it ... (continued)

28 of 29 new or added lines in 2 files covered. (96.55%)

7 existing lines in 1 file now uncovered.

8795 of 9459 relevant lines covered (92.98%)

148.8 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
94.16
1.41% src/util.cpp

Coverage Regressions

Lines Coverage ∆ File
7
0.0
0.0% src/qrc_qmake_qmake_qm_files.cpp
Jobs
ID Job ID Ran Files Coverage
1 35721681840.1 22 Sep 2026 11:38AM UTC 114
92.98
GitHub Action Run
Source Files on build 35721681840
  • Tree
  • List 114
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35721681840
  • cb2c4239 on github
  • Prev Build on main (#35721653780)
  • Next Build on main (#35766482329)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc