Skip to content

fix: remove expired device shares without sparse event arrays - #8182

Draft
Toomad23 wants to merge 1 commit into
Ylianst:masterfrom
Toomad23:fix/device-share-expiry-8044
Draft

Toomad23 wants to merge 1 commit into
Ylianst:masterfrom
Toomad23:fix/device-share-expiry-8044

Conversation

@Toomad23

@Toomad23 Toomad23 commented Sep 27, 2026 •

Copy link
Copy Markdown

Summary

Fixes #8044.

createDeviceShareLink removes expired entries with delete docs[i]. This leaves a sparse array; common.Clone() serializes the event through JSON, converting holes to null. The recipient's event.deviceShares loop then reads userid from null.

Use docs.splice(i--, 1) instead, preserving a dense array and checking the next entry after removal. Existing expiry boundary, recurring/unlimited-share behavior, field stripping, and per-recipient URL filtering are unchanged.

Verification (local harness, not part of the diff)

Per maintainer feedback, the regression harness is kept locally and is not included in this PR. It uses Node's built-in test runner with no extra dependencies. It executes the actual database callback and recipient loop extracted from meshuser.js, plus the actual common.Clone. Database and event transport are in-memory doubles.

node --check meshuser.js
git diff --check

Against upstream 029b7338ecfeeacc65da3b5a1a4cc069baeb2f65: 4 failures / 7 tests. After the fix: 7 / 7 passed.

Coverage: expired + live entries, consecutive expired entries, all expired, empty result, active/unlimited/recurring/boundary shares, owner versus other-recipient URL visibility, database-error path.

The local harness was re-run after removing the test directory; all checks still pass. The PR diff now contains only the one-line meshuser.js fix.

Scope and QA

  • One production-line change; no UI, dependencies, configuration or schema changes.
  • AI-assisted contribution prepared with Hermes; the changed control flow and test assertions were reviewed and the commands above were actually executed.
  • These are source-level regression tests, not an end-to-end run with a live server/database/browser. No production system was changed.
  • Opened as draft pending live integration/manual UI QA, in recognition of the repository's contribution checklist. Upstream CI status is not claimed here.

@si458

si458 commented Sep 27, 2026

Copy link
Copy Markdown
Collaborator

Plz can to remove the tests folder

@Toomad23
Toomad23 force-pushed the fix/device-share-expiry-8044 branch from cb386d6 to 8df2305 Compare September 27, 2026 20:54
@Toomad23

Copy link
Copy Markdown
Author

Removed the test directory as requested. The diff now contains only the one-line fix in meshuser.js. I kept the regression harness locally and re-ran it: 7/7 tests passed; node --check meshuser.js and git diff --check also pass. The PR description has been updated to make the verification scope clear.

This branch has not been deployed

No deployments
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.

TypeError: Cannot read properties of null (reading 'userid') in HandleEvent — createDeviceShareLink dispatches a holey deviceShares array

2 participants