-
Notifications
You must be signed in to change notification settings - Fork 348
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Handle Depth
header for COPY
as this is required by RFC
#1495
base: master
Are you sure you want to change the base?
Conversation
lib/DAV/Server.php
Outdated
|
||
// Depth of inifinty is valid for MOVE and COPY. If it is not set the RFC requires to act like it was 'infinity'. | ||
$depth = strtolower($request->getHeader('Depth') ?? 'infinity'); | ||
if ($depth !== 'infinity' && is_numeric($depth)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In core plugin above it is stated that only infinity
is allowed. Adding this logic here can reduce the necessary code changes a lot.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@DeepDiver1975 yes thats for MOVE
, but for COPY
we need to support also numeric values.
ping again, also cc @phil-davis Would be great to get this fixed so sabre passes the litmus test v15 ( https://github.com/notroj/litmus previously http://www.webdav.org/neon/litmus/ ) |
Anything I can help with to get this reviewed? (I do not want to bug you but this would be a great to get fixed :) ). |
I miss the ci status - what's going on here? |
@susnux can I ask you to rebase this pull request ... THX |
Only `Depth: infinity` is allowed, ref: rfc4918#section-9.9.2 Signed-off-by: Ferdinand Thiessen <[email protected]>
1. According to the RFC[1] servers **must** support `Depth` 'infinity' and 0. 2. And COPY method on a collection without a Depth header MUST act as if a Depth header with value "infinity" was included. [1] rfc4918#section-9.8.3 Signed-off-by: Ferdinand Thiessen <[email protected]>
1076773
to
069c16d
Compare
@DeepDiver1975 sure, done! Noticed I had some code style issues / compatibility issues because I was using PHP 8+ syntax and tests use PHP 7.4. This is now fixed. |
Signed-off-by: Ferdinand Thiessen <[email protected]>
8dc4522
to
3e722c3
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1495 +/- ##
=========================================
Coverage 97.24% 97.24%
- Complexity 2834 2841 +7
=========================================
Files 175 175
Lines 8843 8861 +18
=========================================
+ Hits 8599 8617 +18
Misses 244 244 ☔ View full report in Codecov by Sentry. |
Currently Sabre\DAV does not support the
Depth
header onCOPY
andMOVE
.But the RFC4918 requires servers to do so, the header is not required but:
MOVE
the header, if available, must be 'infinity' -> We just have to check the header and throw bad request otherwiseCOPY
the header may 'infinity' or a positive integer including 0So especially the
COPY
method is currently broken, we noticed this when using the WebDAV litmus test bench (version 0.14) which checks for shallow copies (meaning copy a collection with depth 0).This PR fixes all of this points, while trying to keep backwards compatible. Of cause any using application that implements
ICopyTarget::copyInto
is still broken and need to adapt to the depth change (it continues to work as before, but the bug fix does not propagate).Reference from the RFC:
COPY
Depth
'infinity' and '0': rfc4918#section-9.8.3MOVE
onlyDepth: infinity
is allowed: rfc4918#section-9.9.2