mirror of
https://github.com/rustfs/rustfs.git
synced 2026-10-27 06:18:43 +00:00
5efae5baa6
* fix(ecstore): admit CopyObject destinations like PutObject Object-key platform checks were split across call sites with gaps: CopyObject only ran check_bucket_and_object_names on its destination and then reached the pools' put_object directly, so it admitted keys PutObject rejects (over 1024 bytes, leading slash, and on Windows reserved characters or unaddressable segments, the "writes but cannot be read" case of #3449). - rustfs-utils: expose check_windows_file_name as the single per-segment Win32 rule set; dunce's simplified() reuses it. Reserved device names now include COM/LPT with superscript digits and CONIN$/CONOUT$. - ecstore: replace the duplicated reserved-name table with that function; Windows also rejects control characters 0x01-0x1F (NUL keeps its platform-independent ObjectNameInvalid answer). - ecstore: add check_new_object_args as the shared admission entry for PutObject, cross-key CopyObject destinations and CreateMultipartUpload. In-place copies (metadata replace, restore) keep the copy-only check so existing keys stay rewritable. CreateMultipartUpload now also rejects over-NAME_MAX segments up front instead of failing at completion. - CI: run bucket::utils and dunce tests in the Windows filesystem job. * fix(ecstore): reject new backslash keys on Windows hosts A Windows disk treats '\' as a path separator, so a new key `a\b` lands on the same xl.meta as `a/b` and the two keys overwrite each other. Reject '\' only where a key enters the namespace (check_new_object_args: PutObject, cross-key CopyObject destinations, CreateMultipartUpload) and only on Windows. Reads, deletes, in-flight multipart operations, in-place copies, data movement and internal meta buckets keep accepting it, so keys already stored with '\' stay readable, deletable and movable. Pending owner ruling: whether new '\' keys should be rejected at all, and whether reads/deletes should keep accepting them. * ci(windows): quote filtered test runs and drop duplicate path