non-ascii metadata corrupted after ssync replication (python3)

Bug #2020667 reported by Edouard Dausque
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Object Storage (swift)
Fix Released
Critical
Unassigned

Bug Description

Hello,

related: https://bugs.launchpad.net/swift/+bug/2012531
related: https://review.opendev.org/c/openstack/swift/+/878558

On a swift cluster running based on master, with python 3.7:

Uploading an object with metadata:
curl -X PUT -H "x-object-meta-mtime: 1677510051.018921" -H "X-Auth-Token: $token" -H "X-Object-Meta-mymetadata: testñÞþ压制版.mp4" https://example.org/v1/AUTH_test/test/dummy.txt

No issue:
X-Object-Meta-Orig-Filename: test2ñÞþ压制版.mp4.jpg
Etag: "7cf9a478120a27db53e3e315d5bf124f"

xattr -l 1684920056.14420.data
user.swift.metadata_checksum: 2093bc9b016c04857c3343133cf46e76
user.swift.metadata:
0000 80 02 7D 71 00 28 63 5F 63 6F 64 65 63 73 0A 65 ..}q.(c_codecs.e
0010 6E 63 6F 64 65 0A 71 01 58 0B 00 00 00 58 2D 54 ncode.q.X....X-T
0020 69 6D 65 73 74 61 6D 70 71 02 58 06 00 00 00 6C imestampq.X....l
0030 61 74 69 6E 31 71 03 86 71 04 52 71 05 68 01 58 atin1q..q.Rq.h.X
0040 10 00 00 00 31 36 38 34 39 32 30 30 35 36 2E 31 ....1684920056.1
0050 34 34 32 30 71 06 68 03 86 71 07 52 71 08 68 01 4420q.h..q.Rq.h.
0060 58 0C 00 00 00 43 6F 6E 74 65 6E 74 2D 54 79 70 X....Content-Typ
0070 65 71 09 68 03 86 71 0A 52 71 0B 68 01 58 0A 00 eq.h..q.Rq.h.X..
0080 00 00 69 6D 61 67 65 2F 6A 70 65 67 71 0C 68 03 ..image/jpegq.h.
0090 86 71 0D 52 71 0E 68 01 58 0E 00 00 00 43 6F 6E .q.Rq.h.X....Con
00A0 74 65 6E 74 2D 4C 65 6E 67 74 68 71 0F 68 03 86 tent-Lengthq.h..
00B0 71 10 52 71 11 68 01 58 02 00 00 00 34 30 71 12 q.Rq.h.X....40q.
00C0 68 03 86 71 13 52 71 14 68 01 58 04 00 00 00 45 h..q.Rq.h.X....E
00D0 54 61 67 71 15 68 03 86 71 16 52 71 17 68 01 58 Tagq.h..q.Rq.h.X
00E0 20 00 00 00 37 63 66 39 61 34 37 38 31 32 30 61 ...7cf9a478120a
00F0 32 37 64 62 35 33 65 33 65 33 31 35 64 35 62 66 27db53e3e315d5bf
0100 31 32 34 66 71 18 68 03 86 71 19 52 71 1A 68 01 124fq.h..q.Rq.h.
0110 58 13 00 00 00 58 2D 4F 62 6A 65 63 74 2D 4D 65 X....X-Object-Me
0120 74 61 2D 4D 74 69 6D 65 71 1B 68 03 86 71 1C 52 ta-Mtimeq.h..q.R
0130 71 1D 68 01 58 11 00 00 00 31 36 38 34 38 34 34 q.h.X....1684844
0140 30 38 30 2E 30 30 30 30 30 30 71 1E 68 03 86 71 080.000000q.h..q
0150 1F 52 71 20 68 01 58 1B 00 00 00 58 2D 4F 62 6A .Rq h.X....X-Obj
0160 65 63 74 2D 4D 65 74 61 2D 4F 72 69 67 2D 46 69 ect-Meta-Orig-Fi
0170 6C 65 6E 61 6D 65 71 21 68 03 86 71 22 52 71 23 lenameq!h..q"Rq#
0180 68 01 58 49 00 00 00 74 65 73 74 32 C3 83 C2 83 h.XI...test2....
0190 C3 82 C2 B1 C3 83 C2 83 C3 82 C2 9E C3 83 C2 83 ................
01A0 C3 82 C2 BE C3 83 C2 A5 C3 82 C2 8E C3 82 C2 8B ................
01B0 C3 83 C2 A5 C3 82 C2 88 C3 82 C2 B6 C3 83 C2 A7 ................
01C0 C3 82 C2 89 C3 82 C2 88 2E 6D 70 34 2E 6A 70 67 .........mp4.jpg
01D0 71 24 68 03 86 71 25 52 71 26 68 01 58 04 00 00 q$h..q%Rq&h.X...
01E0 00 6E 61 6D 65 71 27 68 03 86 71 28 52 71 29 68 .nameq'h..q(Rq)h
01F0 01 58 56 00 00 00 2F 41 55 54 48 5F 62 33 36 65 .XV.../AUTH_b36e
0200 37 62 30 63 32 37 66 61 34 37 30 39 61 30 32 37 7b0c27fa4709a027
0210 34 63 35 63 38 32 31 61 64 38 30 61 2F 6E 6D 79 4c5c821ad80a/nmy
0220 2F 74 65 73 74 32 C3 83 C2 B1 C3 83 C2 9E C3 83 /test2..........
0230 C2 BE C3 A5 C2 8E C2 8B C3 A5 C2 88 C2 B6 C3 A7 ................
0240 C2 89 C2 88 2E 6D 70 34 2E 6A 70 67 71 2A 68 03 .....mp4.jpgq*h.
0250 86 71 2B 52 71 2C 75 2E .q+Rq,u.

Removing it and launching swift-object-replicator with ssync.
Metadata is corrupted:
X-Object-Meta-Orig-Filename: test2ñÞþ压制版.mp4.jpg
Etag: "7cf9a478120a27db53e3e315d5bf124f"

xattr -l 1684920056.14420.data
user.swift.metadata_checksum: e77f06b4d542e3d2c6bdbc6d9fa816f2
user.swift.metadata:
0000 80 02 7D 71 00 28 63 5F 63 6F 64 65 63 73 0A 65 ..}q.(c_codecs.e
0010 6E 63 6F 64 65 0A 71 01 58 0B 00 00 00 58 2D 54 ncode.q.X....X-T
0020 69 6D 65 73 74 61 6D 70 71 02 58 06 00 00 00 6C imestampq.X....l
0030 61 74 69 6E 31 71 03 86 71 04 52 71 05 68 01 58 atin1q..q.Rq.h.X
0040 10 00 00 00 31 36 38 34 39 32 30 30 35 36 2E 31 ....1684920056.1
0050 34 34 32 30 71 06 68 03 86 71 07 52 71 08 68 01 4420q.h..q.Rq.h.
0060 58 0C 00 00 00 43 6F 6E 74 65 6E 74 2D 54 79 70 X....Content-Typ
0070 65 71 09 68 03 86 71 0A 52 71 0B 68 01 58 0A 00 eq.h..q.Rq.h.X..
0080 00 00 69 6D 61 67 65 2F 6A 70 65 67 71 0C 68 03 ..image/jpegq.h.
0090 86 71 0D 52 71 0E 68 01 58 0E 00 00 00 43 6F 6E .q.Rq.h.X....Con
00A0 74 65 6E 74 2D 4C 65 6E 67 74 68 71 0F 68 03 86 tent-Lengthq.h..
00B0 71 10 52 71 11 68 01 58 02 00 00 00 34 30 71 12 q.Rq.h.X....40q.
00C0 68 03 86 71 13 52 71 14 68 01 58 04 00 00 00 45 h..q.Rq.h.X....E
00D0 54 61 67 71 15 68 03 86 71 16 52 71 17 68 01 58 Tagq.h..q.Rq.h.X
00E0 20 00 00 00 37 63 66 39 61 34 37 38 31 32 30 61 ...7cf9a478120a
00F0 32 37 64 62 35 33 65 33 65 33 31 35 64 35 62 66 27db53e3e315d5bf
0100 31 32 34 66 71 18 68 03 86 71 19 52 71 1A 68 01 124fq.h..q.Rq.h.
0110 58 13 00 00 00 58 2D 4F 62 6A 65 63 74 2D 4D 65 X....X-Object-Me
0120 74 61 2D 4D 74 69 6D 65 71 1B 68 03 86 71 1C 52 ta-Mtimeq.h..q.R
0130 71 1D 68 01 58 11 00 00 00 31 36 38 34 38 34 34 q.h.X....1684844
0140 30 38 30 2E 30 30 30 30 30 30 71 1E 68 03 86 71 080.000000q.h..q
0150 1F 52 71 20 68 01 58 1B 00 00 00 58 2D 4F 62 6A .Rq h.X....X-Obj
0160 65 63 74 2D 4D 65 74 61 2D 4F 72 69 67 2D 46 69 ect-Meta-Orig-Fi
0170 6C 65 6E 61 6D 65 71 21 68 03 86 71 22 52 71 23 lenameq!h..q"Rq#
0180 68 01 58 85 00 00 00 74 65 73 74 32 C3 83 C2 83 h.X....test2....
0190 C3 82 C2 83 C3 83 C2 82 C3 82 C2 B1 C3 83 C2 83 ................
01A0 C3 82 C2 83 C3 83 C2 82 C3 82 C2 9E C3 83 C2 83 ................
01B0 C3 82 C2 83 C3 83 C2 82 C3 82 C2 BE C3 83 C2 83 ................
01C0 C3 82 C2 A5 C3 83 C2 82 C3 82 C2 8E C3 83 C2 82 ................
01D0 C3 82 C2 8B C3 83 C2 83 C3 82 C2 A5 C3 83 C2 82 ................
01E0 C3 82 C2 88 C3 83 C2 82 C3 82 C2 B6 C3 83 C2 83 ................
01F0 C3 82 C2 A7 C3 83 C2 82 C3 82 C2 89 C3 83 C2 82 ................
0200 C3 82 C2 88 2E 6D 70 34 2E 6A 70 67 71 24 68 03 .....mp4.jpgq$h.
0210 86 71 25 52 71 26 68 01 58 04 00 00 00 6E 61 6D .q%Rq&h.X....nam
0220 65 71 27 68 03 86 71 28 52 71 29 68 01 58 56 00 eq'h..q(Rq)h.XV.
0230 00 00 2F 41 55 54 48 5F 62 33 36 65 37 62 30 63 ../AUTH_b36e7b0c
0240 32 37 66 61 34 37 30 39 61 30 32 37 34 63 35 63 27fa4709a0274c5c
0250 38 32 31 61 64 38 30 61 2F 6E 6D 79 2F 74 65 73 821ad80a/nmy/tes
0260 74 32 C3 83 C2 B1 C3 83 C2 9E C3 83 C2 BE C3 A5 t2..............
0270 C2 8E C2 8B C3 A5 C2 88 C2 B6 C3 A7 C2 89 C2 88 ................
0280 2E 6D 70 34 2E 6A 70 67 71 2A 68 03 86 71 2B 52 .mp4.jpgq*h..q+R
0290 71 2C 75 2E q,u.

Tags: python3
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to swift (master)

Fix proposed to branch: master
Review: https://review.opendev.org/c/openstack/swift/+/884240

Changed in swift:
status: New → In Progress
clayg (clay-gerrard)
Changed in swift:
importance: Undecided → Critical
Revision history for this message
clayg (clay-gerrard) wrote :

N.B. Tim and the bug title correctly describes this bug as "non-ascii metadata" which in swift object metadata is user keys and values, i.e.

  X-Object-Meta-🌴: 👍

is in scope.

Our particiation in liberal acceptance of clients back when rfc2616 was the law of the land contributed to mess we're all in https://www.mnot.net/blog/2014/06/07/rfc2616_is_dead and at somepoint we should more deeply consider the appropriate way for our users to give our clients stuff like:

    --meta 🌴=👍

... in their terminal, and we do all the right rfc273X things to serialize the http request and response appropriately (some kind of url quote/escape?); after that we can think about how to liberally handle non-conforming existing metadata and non-conforming client requests.

Revision history for this message
Tim Burke (1-tim-z) wrote :

Fix has merged.

Changed in swift:
status: In Progress → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/swift 2.32.0

This issue was fixed in the openstack/swift 2.32.0 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.