[Django] #28721: Cannot use the variable name "inf" in templates

8 views
Skip to first unread message

Django

unread,
Oct 18, 2017, 5:37:37 AM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
-------------------------------------------+------------------------
Reporter: Fraser Nevett | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 1.11
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------------+------------------------
Trying to render a template variable named **inf** does not work:

{{{#!python
>>> from django.template import Template, Context
>>> Template('{{ inf }}').render(Context({'inf': 'xxx'}))
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/tmp/venv/lib/python2.7/site-packages/django/template/base.py",
line 191, in __init__
self.nodelist = self.compile_nodelist()
File "/tmp/venv/lib/python2.7/site-packages/django/template/base.py",
line 233, in compile_nodelist
e.template_debug = self.get_exception_info(e, e.token)
AttributeError: 'exceptions.OverflowError' object has no attribute 'token'
}}}

It also fails if the variable is undefined in the context:
{{{#!python
>>> Template('{{ inf }}').render(Context())
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/tmp/venv/lib/python2.7/site-packages/django/template/base.py",
line 191, in __init__
self.nodelist = self.compile_nodelist()
File "/tmp/venv/lib/python2.7/site-packages/django/template/base.py",
line 233, in compile_nodelist
e.template_debug = self.get_exception_info(e, e.token)
AttributeError: 'exceptions.OverflowError' object has no attribute 'token'
}}}

This is happening because `'inf'` is used in Python to represent infinity:

{{{#!python
>>> float('inf')
inf
}}}


The problem appears to be with
[https://github.com/django/django/blob/1.11.6/django/template/base.py#L809-L819
this bit of the code]:
{{{#!python
# First try to treat this variable as a number.
#
# Note that this could cause an OverflowError here that we're
not
# catching. Since this should only happen at compile time,
that's
# probably OK.
self.literal = float(var)

# So it's a float... is it an int? If the original value
contained a
# dot or an "e" then it was a float, not an int.
if '.' not in var and 'e' not in var.lower():
self.literal = int(self.literal)
}}}

It successfully converts the string `'inf'` to a float with value of
infinity, but then trying to convert this float to an int causes the
OverflowError:

{{{#!python
>>> int(float('inf'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: cannot convert float infinity to integer
}}}

Python also supports floats of `'-inf'` and `'nan'`. Using `'-inf'` as a
template variable name doesn't work because it isn't a valid variable
name. Using `'nan'` as a template variable name works OK:

{{{#!python
>>> Template('{{ nan }}').render(Context({'nan': 'xxx'}))
u'xxx'
}}}

I think the fix is to allow variables named **inf**, rather than to
support using **inf** as a float literal within templates.

--
Ticket URL: <https://code.djangoproject.com/ticket/28721>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Oct 18, 2017, 9:38:34 AM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+------------------------------------

Reporter: Fraser Nevett | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+------------------------------------
Changes (by Tim Graham):

* stage: Unreviewed => Accepted


--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:1>

Django

unread,
Oct 18, 2017, 10:22:02 AM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned

Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Levi Payne):

* owner: nobody => Levi Payne
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:2>

Django

unread,
Oct 18, 2017, 2:12:50 PM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------

Comment (by Levi Payne):

[https://github.com/django/django/pull/9258 WIP Pull Request]

--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:3>

Django

unread,
Oct 18, 2017, 3:05:08 PM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Levi Payne):

* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:4>

Django

unread,
Oct 18, 2017, 3:05:36 PM10/18/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------

Comment (by Levi Payne):

Pull Request is ready for review.

--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:5>

Django

unread,
Oct 20, 2017, 11:34:48 AM10/20/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Tim Graham):

* needs_better_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:6>

Django

unread,
Oct 20, 2017, 12:46:40 PM10/20/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------

Comment (by Fraser Nevett):

See also #28730

--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:7>

Django

unread,
Oct 21, 2017, 8:55:47 PM10/21/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: assigned
Component: Template system | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------

Comment (by Tim Graham <timograham@…>):

In [changeset:"6c3104221b2cb9f068c07adf3ef24c9f49627834" 6c31042]:
{{{
#!CommitTicketReference repository=""
revision="6c3104221b2cb9f068c07adf3ef24c9f49627834"
Refs #28721 -- Added test for variations of 'inf'/'infinity' as a template
variable names.

Fixed by 9ec7d8e514e09636b0ab4bcac74b5f7a5be335a3.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:8>

Django

unread,
Oct 21, 2017, 8:58:24 PM10/21/17
to django-...@googlegroups.com
#28721: Cannot use the variable name "inf" in templates
---------------------------------+--------------------------------------
Reporter: Fraser Nevett | Owner: Levi Payne
Type: Bug | Status: closed

Component: Template system | Version: 1.11
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Tim Graham):

* status: assigned => closed
* resolution: => fixed


--
Ticket URL: <https://code.djangoproject.com/ticket/28721#comment:9>

Reply all
Reply to author
Forward
0 new messages