- Move package metadata from setup.py to pyproject.toml.
- Drop support for Python 3.9.
- Allow the
...(Ellipsis) statement.
- Allow to use the package with Python 3.14 including t-string support.
- Disallow
try/except*clauses due to a possible sandbox escape and probable uselessness of this feature in the context ofRestrictedPython. In addition, removeExceptionGroupfromsafe_builtins(as useful only withtry/except*). - This feature was introduced intoRestrictedPythonin version 6.0 for Python 3.11+. (CVE-2025-22153) - Drop support for Python 3.8.
- Update setuptools version pin. (#292)
- Allow to use the package with Python 3.13.
- Drop support for Python 3.7.
- Provide new function
RestrictedPython.Guards.safer_getattr_raise. It is similar tosafer_getattrbut handles its parameterdefaultlikegetattr, i.e. it raisesAttributeErrorif the attribute lookup fails and this parameter is not provided, fixes #287.
- Increase the safety level of
safer_getattrallowing applications to use it asgetattrimplementation. Such use should now follow the same policy and give the same level of protection as direct attribute access in an environment based onRestrictedPython'ssafe_builtints. - Prevent information leakage via
AttributeError.objand thestringmodule. (CVE-2024-47532)
- Remove unneeded setuptools fossils that may cause installation problems with recent setuptools versions.
- Add support for single mode statements / execution.
- Fix a potential breakout capability in the provided
safer_getattrmethod that is part of thesafer_builtins.
- Add support for the matmul (
@) operator.
- Drop support for Python 3.6.
- Officially support Python 3.12.
- Prevent DeprecationWarnings from
ast.Strandast.Numon Python 3.12 - Forbid using some attributes providing access to restricted Python internals. (CVE-2023-37271)
- Fix information disclosure problems through Python's "format" functionality
(
formatandformat_mapmethods onstrand its instances,string.Formatter). (CVE-2023-41039)
- Drop support for Python 2.7 and 3.5.
- Officially support Python 3.11.
- Allow to use the Python 3.11 feature of exception groups and except* (PEP 654).
- Document that
__name__is needed to define classes. - Add support for Python 3.10. Auditing the Python 3.10 change log did not reveal any changes which require actions in RestrictedPython.
- Avoid deprecation warnings when using Python 3.8+. (#192)
- Add support for (Python 3.8+) assignment expressions (i.e. the
:=operator) - Add support for Python 3.9 after checking the security implications of the syntax changes made in that version.
- Add support for the
bytesandsortedbuiltins (#186)
- Document parameter
modefor thecompile_restrictedfunctions (#157) - Fix documentation for
compile_restricted_function(#158)
- Fix
compile_restricted_functionwith SyntaxErrors that have no text (#181) - Drop install dependency on
setuptools. (#189)
- Revert the allowance of the
...(Ellipsis) statement, as of 4.0. It is not needed to support Python 3.8. The security implications of the Ellipsis Statement is not 100 % clear and is not checked....(Ellipsis) is disallowed again.
- Add support for f-strings in Python 3.6+. (#123)
Changes since 3.6.0:
- The
compile_restricted*functions now return anamedtuple CompileResultinstead of a simpletuple. - Drop the old implementation of version 3.x: RCompile.py, SelectCompiler.py, MutatingWorker.py, RestrictionMutator.py and tests/verify.py.
- Drop support for long-deprecated
setsmodule.
RestrictedPython now ships with a default implementation for
_getattr_which prevents from using theformat()method on str/unicode as it is not safe, see: http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/Caution: If you do not already have secured the access to this
format()method in your_getattr_implementation useRestrictedPython.Guards.safer_getattr()in your implementation to benefit from this fix.
- Mostly complete rewrite based on Python AST module. [loechel (Alexander Loechel), icemac (Michael Howitz), stephan-hof (Stephan Hofmockel), tlotze (Thomas Lotze)]
- Add support for Python 3.5, 3.6, 3.7.
- Add preliminary support for Python 3.8. as of 3.8.0a3 is released.
- Warn when using another Python implementation than CPython as it is not safe to use RestrictedPython with other versions than CPyton. See https://bitbucket.org/pypy/pypy/issues/2653 for PyPy.
- Allow the
...(Ellipsis) statement. It is needed to support Python 3.8. - Allow yield and yield from statements. Generator functions would now work in RestrictedPython.
- Allow the following magic methods to be defined on classes.
(#104)
They cannot be called directly but by the built-in way to use them (e. g.
class instantiation, or comparison):
__init____contains____lt____le____eq____ne____gt____ge__
- Imports like
from a import *(so called star imports) are now forbidden as they allow to import names starting with an underscore which could override protected build-ins. (#102) - Allow to use list comprehensions in the default implementation of
RestrictionCapableEval.eval(). - Switch to pytest as test runner.
- Bring test coverage to 100 %.
- Improve .Guards.safer_getattr to prevent accessing names starting with underscore. (#142)
- Add name check for names assigned during imports using the
from x import yformat. - Add test for name check when assigning an alias using multiple-context
withstatements in Python 2.7. - Add tests for protection of the iterators for dict and set comprehensions in Python 2.7.
- Remove support for
DocumentTemplate.sequence- this is handled in the DocumentTemplate package itself.
- Remove a testing dependency on
zope.testing.
- Add tests for
Utilitiesmodule. - Filter DeprecationWarnings when importing Python's
setsmodule.
- Drop legacy support for Python 2.1 / 2.2 (
__future__imports ofnested_scopes/generators.).
- Fix deprecation warning:
withis now a reserved keyword on Python 2.6. That means RestrictedPython should run on Python 2.6 now. Thanks to Ranjith Kannikara, GSoC Student for the patch. - Add tests for ternary if expression and for
withkeyword and context managers.
- Changed homepage URL to the PyPI site
- Improve
README.txt.
- Fix http://www.zope.org/Collectors/Zope/2295: Bare conditional in a Zope 2 PythonScript followed by a comment causes SyntaxError.
- RestrictedPython now has its own release cycle as a separate project.
- Synchronized with RestrictedPython from Zope 2 tree.
- Corresponds to the verison of the RestrictedPython package shipped as part of the Zope 3.2.0 release.
- No changes from 3.1.0.
- Corresponds to the verison of the RestrictedPython package shipped as part of the Zope 3.1.0 release.
- Remove unused fossil module,
SafeMapping. - Replaced use of deprecated
whrandommodule withrandom(aliased towhrandomfor backward compatibility).
- Corresponds to the verison of the RestrictedPython package shipped as part of the Zope X3.0.0 release.