From c153bcb4794219dde3276aecd5c784fa95a1a643 Mon Sep 17 00:00:00 2001 From: bphillips Date: Tue, 1 Dec 2015 14:09:10 -0500 Subject: [PATCH] Added validation to UUIDField to properly catch invalid input types (lists, tuples, etc). --- rest_framework/fields.py | 6 ++++-- tests/test_fields.py | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 1893a32c..8541bc43 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -769,9 +769,11 @@ class UUIDField(Field): try: if isinstance(data, six.integer_types): return uuid.UUID(int=data) - else: + elif isinstance(data, six.string_types): return uuid.UUID(hex=data) - except (ValueError, TypeError): + else: + self.fail('invalid', value=data) + except (ValueError): self.fail('invalid', value=data) return data diff --git a/tests/test_fields.py b/tests/test_fields.py index 8d3bef10..9cb59f7d 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -609,7 +609,8 @@ class TestUUIDField(FieldValues): 284758210125106368185219588917561929842: uuid.UUID('d63a6fb6-88d5-40c7-a91c-9edf73283072') } invalid_inputs = { - '825d7aeb-05a9-45b5-a5b7': ['"825d7aeb-05a9-45b5-a5b7" is not a valid UUID.'] + '825d7aeb-05a9-45b5-a5b7': ['"825d7aeb-05a9-45b5-a5b7" is not a valid UUID.'], + (1, 2, 3): ['"(1, 2, 3)" is not a valid UUID.'] } outputs = { uuid.UUID('825d7aeb-05a9-45b5-a5b7-05df87923cda'): '825d7aeb-05a9-45b5-a5b7-05df87923cda'