Skip to content

Zimbra: changes() can return objects deleted mid-sync, since _fetch_many still uses calendar-multiget #48

Open

Description

@tobixen

Disclaimer: AI-generated text below the line, generated by Claude Opus 5.5, from the prompt:

merge #46 as for now [found by the clean-context review of that merge, and filed rather than fixed]


#46 made get() and get_by_native_id() read with a plain GET where caldav's multiget.deleted hint says the server's calendar-multiget returns deleted objects (Zimbra). _fetch_many() (src/calendaring/_async/caldav.py), which changes() uses, still goes through multiget. So on Zimbra, an object deleted between changes() listing its href and fetching it comes back with its old data, while the base class promises that "objects gone meanwhile are left out".

The window is narrow and only Zimbra has the problem, but news/+caldav-values.bugfix.rst ("an object is read with a GET") reads as if every read were covered.

Fix: on such servers, _fetch_many() does a GET per href, with a test that monkeypatches multiget the way test_caldav_backend.py's multiget-ghost test does. If the fix misses the release, narrow the news fragment instead.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions