From: Tom Clegg Date: Tue, 18 Nov 2014 16:24:58 +0000 (-0500) Subject: 4363: Accept manifest_text in a non-UTF-8 encoding that is equal to its UTF-8 encoding. X-Git-Tag: 1.1.0~1987^2~2 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/69fae522bf6fe6dbaa64ce7d75ef4ce5616ced72 4363: Accept manifest_text in a non-UTF-8 encoding that is equal to its UTF-8 encoding. --- diff --git a/services/api/app/models/collection.rb b/services/api/app/models/collection.rb index 5dd760feee..2f81dc070b 100644 --- a/services/api/app/models/collection.rb +++ b/services/api/app/models/collection.rb @@ -111,6 +111,19 @@ class Collection < ArvadosModel if manifest_text.encoding.name == 'UTF-8' and manifest_text.valid_encoding? true else + begin + # If Ruby thinks the encoding is something else, like 7-bit + # ASCII, but its stored bytes are equal to the (valid) UTF-8 + # encoding of the same string, we declare it to be a UTF-8 + # string. + utf8 = manifest_text + utf8.force_encoding Encoding::UTF_8 + if utf8.valid_encoding? and utf8 == manifest_text.encode(Encoding::UTF_8) + manifest_text = utf8 + return true + end + rescue + end errors.add :manifest_text, "must use UTF-8 encoding" false end