Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Board in trash breaks file listing (PROPFIND 500) for users with a card attachment shared/mounted

Abierto
#8,257 0 comentarios 1 reacción 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
58/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
php

Línea de trabajo

Comienza con BoardMapper::findBoardIds() y las rutas _getSharedWith(), applyBoardPermission() y PermissionService::checkPermission() mencionadas en el informe. Traza cómo un board eliminado de forma lógica llega a la configuración del montaje de files y reproduce el fallo de PROPFIND con un adjunto de tarjeta montado. La tarea estará terminada cuando los shares de los boards enviados a la papelera no se monten y los listados de archivos ya no devuelvan HTTP 500 durante la retención en la papelera.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

  1. As user A, attach a file from Files to a card ("share file with card", creates an oc_share row with share_type = 12 and share_with = <card id>).
  2. Share the board with user B, so the attachment is mounted for B.
  3. As user A, delete the board. Do not empty the trash.
  4. 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)

  1. BoardMapper::findBoardIds() (lib/Db/BoardMapper.php:81) has no deleted_at = 0 filter, so boards in the trash stay in the list.
  2. DeckShareProvider::_getSharedWith() (lib/Sharing/DeckShareProvider.php:826) filters only dc.deleted_at = 0, which is the card. A card on a trashed board still has deleted_at = 0, so its share is returned.
  3. DeckShareProvider::applyBoardPermission() (lib/Sharing/DeckShareProvider.php:678) calls checkPermission(..., $allowDeletedCard = true) while $allowDeletedBoard stays false.
  4. PermissionService::checkPermission() (lib/Service/PermissionService.php:157) passes that false to getPermissions() -> getBoard() -> BoardMapper::find(..., $allowDeleted = false), which builds the deleted_at = 0 query and throws DoesNotExistException.
  5. applyBoardPermission() only catches NoPermissionException, so the exception propagates through OC\Share20\Manager::getSharedWith() and OCA\Files_Sharing\MountProvider into OC\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 = 0 to BoardMapper::findBoardIds()
  • add db.deleted_at = 0 to the _getSharedWith() query
  • pass $allowDeletedBoard = true in applyBoardPermission() and additionally catch DoesNotExistException there
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\"; "}}
Lenguaje dominante
JavaScript
Estrellas
1.4k
Forks
358
Merge medio
2 d 18 h
PR fusionados (30 d)
83

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de nextcloud/deck

Todos los issues de nextcloud/deck

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.