Skip to content

MimeTypesRegistry.classify() fails with a bytes data #39

@fdiary

Description

@fdiary

Hello,

failed = "text/x-unknown-content-type"
filename = filename or ""
data = data or ""
data = data.encode()

Here, the code assume data is str but it can be bytes.

I'd like to propose the following change.

diff --git a/Products/MimetypesRegistry/MimeTypesRegistry.py b/Products/MimetypesRegistry/MimeTypesRegistry.py
index 1f5c4b5..438f439 100644
--- a/Products/MimetypesRegistry/MimeTypesRegistry.py
+++ b/Products/MimetypesRegistry/MimeTypesRegistry.py
@@ -322,7 +322,8 @@ class MimeTypesRegistry(UniqueObject, ActionProviderBase, Folder):
                 failed = "text/x-unknown-content-type"
                 filename = filename or ""
                 data = data or ""
-                data = data.encode()
+                if isinstance(data, str):
+                    data = data.encode()
                 ct, enc = guess_content_type(filename, data, None)
                 if ct == failed:
                     ct = "text/plain"
diff --git a/Products/MimetypesRegistry/tests/test_mimetypes.py b/Products/MimetypesRegistry/tests/test_mimetypes.py
index 1f55056..d0e7a40 100644
--- a/Products/MimetypesRegistry/tests/test_mimetypes.py
+++ b/Products/MimetypesRegistry/tests/test_mimetypes.py
@@ -73,6 +73,10 @@ class TestMimeTypesclass(unittest.TestCase):
         mt = reg.classify("baz", filename="xxx")
         self.assertTrue(isinstance(mt, application_octet_stream), str(mt))

+        # test binary data
+        mt = reg.classify(b"\x01")
+        self.assertTrue(isinstance(mt, application_octet_stream), str(mt))
+
     def testExtension(self):
         reg = self.registry
         data = "<foo>bar</foo>"

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