integrity:check-core reports FILE_MISSING for the mimetypelist.js test fixture in QA builds
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 8.8k
- Forks
- 2.1k
- Avg merge
- 20h 7m
- Merged PRs (30d)
- 41
Description
Summary
occ integrity:check-core reports FILE_MISSING on the QA variants only
(owncloud-11.0.0-qa, owncloud-complete-20260730-qa) for:
tests/data/integritycheck/app/core/js/mimetypelist.js
expected: 27c74670adb750...830763fd
current:
Non-QA variants are INTACT — they ship no tests/ directory, so the path
never exists.
Root cause: signer/verifier exclusion asymmetry
ExcludeFileByNameFilterIterator excludes by a path-suffix regex
(lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php:66):
private $excludedFilePathPatterns = [
'|/core/js/mimetypelist.js$|', // regenerable via occ maintenance:mimetype:update-js
];
That regex is meant to exempt the one regenerable file at the server root, but
$ -anchored suffix matching also hits the integritycheck test fixture:
/srv/owncloud/tests/data/integritycheck/app/core/js/mimetypelist.js match=1
/srv/owncloud/core/js/mimetypelist.js match=1
The signer (ocsign) excludes the exact path core/js/mimetypelist.js, so it
signs the fixture and omits the real one. Verified in the published
v11.0.0 complete-qa manifest:
core/js/mimetypelist.jsin manifest: falsetests/data/integritycheck/app/core/js/mimetypelist.jsin manifest: true
So the verifier skips on disk exactly the file the signer put in the manifest →
FILE_MISSING.
Impact
Cosmetic-but-loud for QA builds: hasPassedCheck() treats FILE_MISSING as a
failure, so QA installs show a code-integrity warning. No cryptographic issue —
the envelope itself verifies: all 57 scopes in the published v11.0.0
complete-qa tarball pass ECDSA-P384/SHA-384 over the verbatim hashes bytes,
leaf CN == scope id, chain to root-g2, and 0 manifest-vs-disk diffs on a
pristine extraction.
Not a 11.0.0 regression — v11.0.0-rc3's complete-qa tarball reproduces it
identically, and the exclusion has been in place since 0f29535218.
Suggested fix
Align the two sides. Either anchor the verifier pattern to the server root so it
matches only the real file, e.g.
'|^' . preg_quote($root, '|') . '/core/js/mimetypelist\.js$|'
(the iterator already receives $root), or have the signer apply the same
suffix rule. Anchoring the verifier is the narrower change and keeps the fixture
signed and checked.
Reproduce
gh release download v11.0.0 --repo owncloud/core -p 'owncloud-complete-20260730-qa.tar.bz2'
tar xjf owncloud-complete-20260730-qa.tar.bz2
# install, then:
occ integrity:check-core
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php at the exclusion pattern around line 66, then reproduce with occ integrity:check-core on the published complete-qa build. Compare the verifier's excluded paths with the signer behavior described in the issue. Done means the server-root mimetypelist.js remains excluded while the tests/data integritycheck fixture is signed, checked, and no longer reported as FILE_MISSING.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- security
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100