Skip to content

Commit 8dffaeb

Browse files
committed
fix: check version if uuid object
1 parent 4cc1c93 commit 8dffaeb

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/validators/uuid.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,19 @@ impl Validator for UuidValidator {
9191
) -> ValResult<'data, PyObject> {
9292
let class = get_uuid_type(py)?;
9393
if let Some(py_input) = input.input_is_instance(class) {
94+
if let Some(expected_version) = self.version {
95+
let py_input_version: usize = py_input.getattr(intern!(py, "version"))?.extract()?;
96+
let expected_version = usize::from(expected_version);
97+
if expected_version != py_input_version {
98+
return Err(ValError::new(
99+
ErrorType::UuidVersionMismatch {
100+
version: py_input_version,
101+
schema_version: expected_version,
102+
},
103+
input,
104+
));
105+
}
106+
}
94107
Ok(py_input.to_object(py))
95108
} else if extra.strict.unwrap_or(self.strict) && input.is_python() {
96109
Err(ValError::new(
@@ -150,8 +163,7 @@ impl UuidValidator {
150163
input,
151164
));
152165
}
153-
}
154-
166+
};
155167
Ok(uuid)
156168
}
157169

tests/validators/test_uuid.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,22 @@ def test_uuid_strict(input_value, expected):
110110
[
111111
# Valid UUIDs
112112
('a6cc5730-2261-11ee-9c43-2eb5a363657c', 1, UUID('a6cc5730-2261-11ee-9c43-2eb5a363657c')),
113+
(UUID('a6cc5730-2261-11ee-9c43-2eb5a363657c'), 1, UUID('a6cc5730-2261-11ee-9c43-2eb5a363657c')),
113114
('04e4aeb3-8f20-30d0-8852-d295e1265eed', 3, UUID('04e4aeb3-8f20-30d0-8852-d295e1265eed')),
115+
(UUID('04e4aeb3-8f20-30d0-8852-d295e1265eed'), 3, UUID('04e4aeb3-8f20-30d0-8852-d295e1265eed')),
114116
('0e7ac198-9acd-4c0c-b4b4-761974bf71d7', 4, UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7')),
115-
('08ed0736-fb95-5cc5-85ed-37e4f3df9b29', 5, UUID('08ed0736-fb95-5cc5-85ed-37e4f3df9b29')),
117+
(UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7'), 4, UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7')),
118+
('0e7ac198-9acd-4c0c-b4b4-761974bf71d7', 4, UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7')),
119+
(UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7'), 4, UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7')),
116120
# Invalid UUIDs
117121
('a6cc5730-2261-11ee-9c43-2eb5a363657c', 5, Err('UUID version 1 does not match expected version: 5')),
122+
(UUID('a6cc5730-2261-11ee-9c43-2eb5a363657c'), 5, Err('UUID version 1 does not match expected version: 5')),
118123
('04e4aeb3-8f20-30d0-8852-d295e1265eed', 4, Err('UUID version 3 does not match expected version: 4')),
124+
(UUID('04e4aeb3-8f20-30d0-8852-d295e1265eed'), 4, Err('UUID version 3 does not match expected version: 4')),
119125
('0e7ac198-9acd-4c0c-b4b4-761974bf71d7', 3, Err('UUID version 4 does not match expected version: 3')),
126+
(UUID('0e7ac198-9acd-4c0c-b4b4-761974bf71d7'), 3, Err('UUID version 4 does not match expected version: 3')),
120127
('08ed0736-fb95-5cc5-85ed-37e4f3df9b29', 1, Err('UUID version 5 does not match expected version: 1')),
128+
(UUID('08ed0736-fb95-5cc5-85ed-37e4f3df9b29'), 1, Err('UUID version 5 does not match expected version: 1')),
121129
],
122130
)
123131
def test_uuid_version(input_value, version, expected):

0 commit comments

Comments
 (0)