GHSA-vq2f-vcc9-j8mv
Python Liquid: Infinite loop when parsing malformed `{% case %}` tags
Packages
| Ecosystem | Package | Affected | Fixed in |
|---|---|---|---|
| PyPI | python-liquid | < 2.2.1 | 2.2.1 |
Details
As written in the advisory (Markdown source, shown as plain text).
### 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, "")
# ...
```
References
External links from the advisory. They lead to third-party sites.