Skip to content

Commit b368bed

Browse files
committed
Switched social card generator to sandboxed Jinja environment
1 parent e2d0012 commit b368bed

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

material/plugins/social/plugin.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from hashlib import sha1
4040
from html import unescape
4141
from io import BytesIO
42-
from jinja2 import Environment
42+
from jinja2.sandbox import SandboxedEnvironment
4343
from jinja2.meta import find_undeclared_variables
4444
from mkdocs.config.base import Config
4545
from mkdocs.config.defaults import MkDocsConfig
@@ -151,7 +151,7 @@ def on_config(self, config):
151151
self.card_variables: dict[str, list[list[str]]] = {}
152152

153153
# Initialize card environment
154-
self.card_env = Environment()
154+
self.card_env = SandboxedEnvironment()
155155
self.card_env.filters["x"] = x_filter
156156

157157
# Always print a warning when debug mode is active
@@ -955,7 +955,7 @@ def _digest(data: object):
955955
# -----------------------------------------------------------------------------
956956

957957
# Extract all variables recursively
958-
def _extract(data: any, env: Environment, config: MkDocsConfig):
958+
def _extract(data: any, env: SandboxedEnvironment, config: MkDocsConfig):
959959

960960
# Traverse configuration or dictionary
961961
if isinstance(data, (Config, dict)):
@@ -980,7 +980,9 @@ def _extract(data: any, env: Environment, config: MkDocsConfig):
980980
return []
981981

982982
# Replace all variables recursively and return a copy of the given data
983-
def _replace(data: any, env: Environment, config: MkDocsConfig, **kwargs):
983+
def _replace(
984+
data: any, env: SandboxedEnvironment, config: MkDocsConfig, **kwargs
985+
):
984986

985987
# Traverse configuration or dictionary
986988
if isinstance(data, (Config, dict)):
@@ -1006,7 +1008,7 @@ def _replace(data: any, env: Environment, config: MkDocsConfig, **kwargs):
10061008

10071009
# Compile template and cache it indefinitely
10081010
@functools.lru_cache(maxsize = None)
1009-
def _compile(data: str, env: Environment):
1011+
def _compile(data: str, env: SandboxedEnvironment):
10101012
return env.from_string(html.unescape(data))
10111013

10121014
# Compute absolute path to internal templates directory,

src/plugins/social/plugin.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from hashlib import sha1
4040
from html import unescape
4141
from io import BytesIO
42-
from jinja2 import Environment
42+
from jinja2.sandbox import SandboxedEnvironment
4343
from jinja2.meta import find_undeclared_variables
4444
from mkdocs.config.base import Config
4545
from mkdocs.config.defaults import MkDocsConfig
@@ -151,7 +151,7 @@ def on_config(self, config):
151151
self.card_variables: dict[str, list[list[str]]] = {}
152152

153153
# Initialize card environment
154-
self.card_env = Environment()
154+
self.card_env = SandboxedEnvironment()
155155
self.card_env.filters["x"] = x_filter
156156

157157
# Always print a warning when debug mode is active
@@ -955,7 +955,7 @@ def _digest(data: object):
955955
# -----------------------------------------------------------------------------
956956

957957
# Extract all variables recursively
958-
def _extract(data: any, env: Environment, config: MkDocsConfig):
958+
def _extract(data: any, env: SandboxedEnvironment, config: MkDocsConfig):
959959

960960
# Traverse configuration or dictionary
961961
if isinstance(data, (Config, dict)):
@@ -980,7 +980,9 @@ def _extract(data: any, env: Environment, config: MkDocsConfig):
980980
return []
981981

982982
# Replace all variables recursively and return a copy of the given data
983-
def _replace(data: any, env: Environment, config: MkDocsConfig, **kwargs):
983+
def _replace(
984+
data: any, env: SandboxedEnvironment, config: MkDocsConfig, **kwargs
985+
):
984986

985987
# Traverse configuration or dictionary
986988
if isinstance(data, (Config, dict)):
@@ -1006,7 +1008,7 @@ def _replace(data: any, env: Environment, config: MkDocsConfig, **kwargs):
10061008

10071009
# Compile template and cache it indefinitely
10081010
@functools.lru_cache(maxsize = None)
1009-
def _compile(data: str, env: Environment):
1011+
def _compile(data: str, env: SandboxedEnvironment):
10101012
return env.from_string(html.unescape(data))
10111013

10121014
# Compute absolute path to internal templates directory,

0 commit comments

Comments
 (0)