Board in trash breaks file listing (PROPFIND 500) for users with a card attachment shared/mounted
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 58/100
Direzione di ricerca
Inizia con BoardMapper::findBoardIds() e con i percorsi _getSharedWith(), applyBoardPermission() e PermissionService::checkPermission() indicati nel report. Traccia il percorso con cui una board eliminata logicamente raggiunge la configurazione del mount di files, quindi riproduci il fallimento di PROPFIND con un allegato di scheda montato. Il lavoro è completato quando le share provenienti da board spostate nel cestino non vengono montate e gli elenchi di file non restituiscono più HTTP 500 durante la conservazione nel cestino.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
When a board is deleted, Deck only soft-deletes it (deck_boards.deleted_at is set) and the row stays until DeleteCron hard-deletes it after trashRetentionHours. During that window, every user who has a file attachment of a card on that board mounted in their file tree gets an uncaught DoesNotExistException on every file listing.
The exception escapes into the files mount setup, so it does not just break Deck. It breaks PROPFIND on the user's files root, which means the desktop client can no longer sync and the Files app fails to list.
The error stops on its own once DeleteCron removes the board row, which makes it look transient, but it lasts for the whole trash retention period.
To Reproduce
- As user A, attach a file from Files to a card ("share file with card", creates an
oc_sharerow withshare_type = 12andshare_with = <card id>). - Share the board with user B, so the attachment is mounted for B.
- As user A, delete the board. Do not empty the trash.
- As user A or B, run a PROPFIND on the files root (open Files, or let the desktop client sync).
Result: HTTP 500, and the log entry below on every request.
Expected behavior
Shares belonging to a board in the trash should not be resolved into mounts, and a trashed board must never cause an uncaught exception in the files mount setup.
Root cause
(line numbers from master, 4.0.0-dev.2)
BoardMapper::findBoardIds()(lib/Db/BoardMapper.php:81) has nodeleted_at = 0filter, so boards in the trash stay in the list.DeckShareProvider::_getSharedWith()(lib/Sharing/DeckShareProvider.php:826) filters onlydc.deleted_at = 0, which is the card. A card on a trashed board still hasdeleted_at = 0, so its share is returned.DeckShareProvider::applyBoardPermission()(lib/Sharing/DeckShareProvider.php:678) callscheckPermission(..., $allowDeletedCard = true)while$allowDeletedBoardstaysfalse.PermissionService::checkPermission()(lib/Service/PermissionService.php:157) passes thatfalsetogetPermissions()->getBoard()->BoardMapper::find(..., $allowDeleted = false), which builds thedeleted_at = 0query and throwsDoesNotExistException.applyBoardPermission()only catchesNoPermissionException, so the exception propagates throughOC\Share20\Manager::getSharedWith()andOCA\Files_Sharing\MountProviderintoOC\Files\SetupManager, aborting the request.
Possible fix
Any of these, the first two look safer because a trashed board's shares should not be mounted at all:
- add
deleted_at = 0toBoardMapper::findBoardIds() - add
db.deleted_at = 0to the_getSharedWith()query - pass
$allowDeletedBoard = trueinapplyBoardPermission()and additionally catchDoesNotExistExceptionthere
Server details
Operating system: Rocky Linux 9
Web server: Apache/2.4.62
Database: MariaDB-server 11.4.12
PHP version: PHP 8.5.9
Nextcloud version: 34.0.2.1
Where did you install Nextcloud from: wget https://download.nextcloud.com/server/releases/{{ nextcloud__version }}.tar.bz2
Signing status:
No errors have been found.
List of activated apps:
Enabled:
- admin_audit: 1.24.0
- appstore: 1.0.0
- bruteforcesettings: 7.0.0
- calendar: 6.5.2
- calendar_resource_management: 0.12.1
- cloud_federation_api: 1.18.0
- comments: 1.24.0
- contacts: 8.7.5
- contactsinteraction: 1.15.0
- dashboard: 7.14.0
- dav: 1.39.0
- deck: 1.18.3
- drawio: 4.3.5
- federatedfilesharing: 1.24.0
- files: 2.6.0
- files_downloadlimit: 5.2.0
- files_external: 1.26.0
- files_lock: 34.0.1
- files_pdfviewer: 7.0.0-dev.0
- files_sharing: 1.26.0
- files_trashbin: 1.24.0
- files_versions: 1.27.0
- forms: 5.3.5
- impersonate: 5.0.0
- logreader: 7.0.0
- lookup_server_connector: 1.22.0
- mail: 5.10.11
- notes: 6.0.1
- notifications: 7.0.0-dev.1
- notify_push: 1.3.5
- oauth2: 1.22.0
- office: 1.0.0
- password_policy: 6.0.0-dev.0
- polls: 9.1.4
- privacy: 6.0.0-dev.1
- profile: 1.3.0
- provisioning_api: 1.24.0
- related_resources: 5.0.0-dev.0
- richdocuments: 11.1.0
- serverinfo: 6.0.0
- settings: 1.17.0
- sharebymail: 1.24.0
- spreed: 24.0.3
- systemtags: 1.24.0
- tasks: 0.18.1
- text: 8.0.0
- theming: 2.9.0
- twofactor_admin: 4.12.0
- twofactor_backupcodes: 1.23.0
- twofactor_email: 3.4.1
- twofactor_totp: 16.0.0
- updatenotification: 1.24.0
- viewer: 7.0.0-dev.0
- webhook_listeners: 1.6.0
- whiteboard: 1.5.9
- workflowengine: 2.16.0
Disabled:
- activity: 7.0.0 (installed 7.0.0)
- announcementcenter: 7.5.0 (installed 7.5.0)
- app_api: 34.0.0 (installed 32.0.0)
- circles: 34.0.0 (installed 31.0.0)
- encryption: 2.22.0
- federation: 1.24.0 (installed 1.21.0)
- files_reminders: 1.7.0 (installed 1.4.0)
- firstrunwizard: 7.0.0-dev.0 (installed 4.0.0)
- nextcloud_announcements: 6.0.0 (installed 3.0.0)
- photos: 7.0.0 (installed 4.0.0)
- recommendations: 7.0.0 (installed 4.0.0)
- support: 6.0.0 (installed 3.0.0)
- survey_client: 6.0.0-dev.0 (installed 3.0.0)
- suspicious_login: 12.0.0-dev.0 (installed 11.0.0-dev.0)
- testing: 1.23.0
- twofactor_nextcloud_notification: 8.0.0
- user_ldap: 1.25.0
- user_status: 1.14.0 (installed 1.12.0)
- weather_status: 1.14.0 (installed 1.11.0)
Are you using an external user-backend, if yes which one: no
Logs
Nextcloud log (data/nextcloud.log)
Repeating on every PROPFIND (user, request IDs and remote address redacted):
{"reqId":"REDACTED","level":3,"time":"2026-08-10T22:06:35+02:00","remoteAddr":"REDACTED","user":"REDACTED","app":"webdav","method":"PROPFIND","url":"/remote.php/dav/files/REDACTED/","scriptName":"/remote.php","message":"Did expect one result but found none when executing: query \"SELECT * FROM `*PREFIX*deck_boards` WHERE (`id` = :dcValue2) AND (`deleted_at` = :dcValue1) ORDER BY `id` ASC\"; ","userAgent":"Mozilla/5.0 (Macintosh) mirall/34.0.1 (Nextcloud, macos-25.5.0)","version":"34.0.2.1","exception":{"Exception":"OCP\\AppFramework\\Db\\DoesNotExistException","Message":"Did expect one result but found none when executing: query \"SELECT * FROM `*PREFIX*deck_boards` WHERE (`id` = :dcValue2) AND (`deleted_at` = :dcValue1) ORDER BY `id` ASC\"; "}}
- Lingua principale
- JavaScript
- Stelle
- 1.4k
- Fork
- 358
- Merge medio
- 2g 18h
- PR unite (30g)
- 83
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di nextcloud/deck
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
CSV export leaves trailing commas in tags and assigned-user fieldsForse già presa @Kumar-s75 l’ha presa 39 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Board clone API failure is treated as a successful board responseForse già presa @Kumar-s75 l’ha presa 39 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
nextcloud/deck#8334 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
1. to develop bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
nextcloud/deck#8146 · 2 commenti · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di nextcloud/deck
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Unsampled pageload span is profiled when profileLifecycle is 'trace' (browser UI profiling)Forse già presa @Jxxunnn l’ha presa oggi. ApertaBrowser Waiting for: Product Owner
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
getsentry/sentry-javascript#25497 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
resource: destroying a resource calls AbortController.abort() without a reason, creating an AbortError with a stack trace each timeForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea: core
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
angular/angular#71422 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug status: needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
facebook/docusaurus#12739 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
factory-active task-identify-harness-labels-done task-identify-issue-type-done
Difficoltà 1/5 1-3 ore Idoneità per principianti 68/100
vercel/ai#23537 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno