v2.14.2 (2026-10-29)
This release addresses 2 security issues, GHSA-qpmf-fgh3-ff25 and GHSA-3r8g-cqwr-jr29.
Packaging
- Bump PyO3 to 0.30.1, jiter to 0.18.0, use
PyFrozenDictby @Viicos in #14003 - Bump speedate to v0.18.0 by @Viicos in #14007
- Publish
pydantic-corewheels for PyPy 8.0 (pp80ABI) by @Viicos in #14083
Performance
- Avoid Python tuple allocation during model fields validation by @Viicos in #13955
- Lazily call repr of values during nested union serialization by @Viicos in #14082
- Skip decorator field checks when no field decorators exist by @alexmojaki in #14111
- Avoid heap allocation for small JSON model field buffers by @alexmojaki in #14113
Fixes
-
Make JSON validation by iteration consistent with Python approach by @davidhewitt in #13275.
JSON validation now handles field lookup and extra data the same way as Python validation. In particular, keys that only match an
unused alias or field name are now treated as extra data, instead of being silently dropped:from pydantic import BaseModel, ConfigDict from pydantic.alias_generators import to_camel class Page(BaseModel): model_config = ConfigDict(extra='forbid', alias_generator=to_camel) page_size: int = 10 Page.model_validate_json('{"page_size": 50}') # Before: Page(page_size=10) # After: ValidationError (extra_forbidden)
See the pull request for the full list of behavior changes.
This change addresses GHSA-qpmf-fgh3-ff25. -
Ignore extra data matching a field name in
TypedDictand dataclasses withextra=allowby @Viicos in #14090. Addresses GHSA-3r8g-cqwr-jr29. -
Fix unpickling of generic classes defined in separate module by @Viicos in #13994
-
Support explicit
by_aliasoverridingvalidate_by_aliasin validation JSON schemas by @Viicos in #13997 -
Fix mypy plugin crash on deferred empty model by @ilevkivskyi in #14027
-
Fix infinite recursion when validating an invalid default with
PydanticUseDefaultby @Viicos in #14028 -
Implement recursion guard for
validate_strings()by @Viicos in #14029 -
Support named tuples in
Sequenceserialization by @Viicos in #14033 -
Take
preserve_empty_pathinto account in URL types equality by @Viicos in #14035 -
Fix pickling of
PydanticCustomErrorandValidationErrors containing custom errors by @Viicos in #14051 -
Do not extract attribute docstrings from nested classes and functions by @Viicos in #14052
-
Fix forward annotations evaluation and type variables substitution when rebuilding parametrized generic models by @Viicos in #14054
-
Fix
Selfresolution in parametrized generics by @Viicos in #14065 -
Check mapping
max_lengthconstraint during validation by @Viicos in #14092 -
Fix deep copy of self-referential models by @Viicos in #14116
Full Changelog: v2.14.1...v2.14.2