VDB
Sign up
—

PYSEC-2026-3035

Python Liquid: Infinite loop when parsing malformed `{% case %}` tags

Quick fix

PYSEC-2026-3035 — python-liquid: upgrade to the fixed version with the command below.

pip install --upgrade 'python-liquid>=2.2.1'

Details

### Impact Given a malformed `{% case %}` tag without associated `{% when %}` or `{% else %}` block, and no terminating `{% endcase %}` tag, Python Liquid hangs in an infinite loop at parse time. This allows malicious template authors to craft templates for a denial of service attack.

### Patches The issue is fixed in version 2.2.1 with the correction of the `liquid.TokenStream.eof` attribute. The `kind` and `value` of the special EOF token are now the same, so either can be tested against `liquid.token.TOKEN_EOF`.

### Workarounds Manually correct the definition of `liquid.TokenStream.eof` before parsing any templates.

```python import liquid from liquid.token import TOKEN_EOF

liquid.stream.TokenStream.eof = liquid.Token(TOKEN_EOF, TOKEN_EOF, -1, "")

# ... ```

Are you affected?

Enter the version of the package you're using.

Affected packages

PyPI/python-liquid
Introduced in: 0Fixed in: 2.2.1
Fixpip install --upgrade 'python-liquid>=2.2.1'

References