[Django] #28105: Missing check in django.contrib.forms.widgets

11 views
Skip to first unread message

Django

unread,
Apr 20, 2017, 1:24:37 PM4/20/17
to django-...@googlegroups.com
#28105: Missing check in django.contrib.forms.widgets
-------------------------------------+-------------------------------------
Reporter: Dylan | Owner: nobody
Verheul |
Type: Bug | Status: new
Component: Forms | Version: 1.11
Severity: Normal | Keywords: gis, forms, widgets
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
In django.contrib.forms.widgets there is this part (line 67 in corrent
master):

context = self.build_attrs(self.attrs, dict(
name=name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value),
geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
STATIC_URL=settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(),
**attrs
))

If `attrs` also contains a key 'geom_type' this leads to an inevitable
crash.

This should probaly be something like:

context_kwargs = attrs.copy()
context_kwargs.upgrade(dict(
name=name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value),
geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
STATIC_URL=settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(),
))

Currently this causes django-bootstrap3 to fail for Django 1.11.

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

Django

unread,
Apr 20, 2017, 8:12:05 PM4/20/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | 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):

* severity: Normal => Release blocker
* stage: Unreviewed => Accepted
* component: Forms => GIS


Old description:

> In django.contrib.forms.widgets there is this part (line 67 in corrent
> master):
>
> context = self.build_attrs(self.attrs, dict(
> name=name,
> module='geodjango_%s' % name.replace('-', '_'), # JS-safe
> serialized=self.serialize(value),
> geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
> STATIC_URL=settings.STATIC_URL,
> LANGUAGE_BIDI=translation.get_language_bidi(),
> **attrs
> ))
>
> If `attrs` also contains a key 'geom_type' this leads to an inevitable
> crash.
>
> This should probaly be something like:
>
> context_kwargs = attrs.copy()
> context_kwargs.upgrade(dict(
> name=name,
> module='geodjango_%s' % name.replace('-', '_'), # JS-safe
> serialized=self.serialize(value),
> geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
> STATIC_URL=settings.STATIC_URL,
> LANGUAGE_BIDI=translation.get_language_bidi(),
> ))
>
> Currently this causes django-bootstrap3 to fail for Django 1.11.

New description:

In`contrib.gis.forms.widgets` there is this part (line 67 in current
master):

{{{
context = self.build_attrs(self.attrs, dict(
name=name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value),
geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
STATIC_URL=settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(),
**attrs
))
}}}

If `attrs` also contains a key 'geom_type' this leads to an inevitable
crash.

This should probaly be something like:

{{{
context_kwargs = attrs.copy()
context_kwargs.update(dict(


name=name,
module='geodjango_%s' % name.replace('-', '_'), # JS-safe
serialized=self.serialize(value),
geom_type=gdal.OGRGeomType(self.attrs['geom_type']),
STATIC_URL=settings.STATIC_URL,
LANGUAGE_BIDI=translation.get_language_bidi(),
))
}}}
Currently this causes django-bootstrap3 to fail for Django 1.11.

--

Comment:

Could you explain more about the use case that causes the crash? If you
could write a test for `tests/gis_tests/test_geoforms.py`, that would be
ideal.

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

Django

unread,
Apr 21, 2017, 6:49:17 AM4/21/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: assigned

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

* owner: nobody => Dylan Verheul
* status: new => assigned


Comment:

I'll see what I can do to fix it myself.

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

Django

unread,
Apr 29, 2017, 1:53:27 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: (none)
Type: Bug | Status: new

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+------------------------------------
Changes (by Dylan Verheul):

* owner: Dylan Verheul => (none)
* status: assigned => new
* easy: 0 => 1


Comment:

The test suite keeps getting stuck on my Mac. Seems like this is easy
pickings so I'll hope someone else picks it up.

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

Django

unread,
Apr 29, 2017, 7:08:34 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: (none)
Type: Bug | Status: new

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Tim Graham):

You likely wouldn't need to run the entire test suite (see
[https://docs.djangoproject.com/en/dev/internals/contributing/writing-code
/unit-tests/#running-only-some-of-the-tests Running only some of the
tests]). Running `gis_tests` should be enough -- the pull request tester
runs the entire suite.

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

Django

unread,
Apr 29, 2017, 7:24:38 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: (none)
Type: Bug | Status: new

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Dylan Verheul):

I'm no stranger to pyenv, virtualenv, git and unit tests. I have followed
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code
/working-with-git/ and
https://docs.djangoproject.com/en/dev/internals/contributing/new-
contributors/ and
https://docs.djangoproject.com/en/dev/intro/contributing/.

Unfortunately the instructions for running the test suite end up in either
a stuck test (have to abort it after several hours), essential tests
skipped (because of sqlite instead of postgis I presume). I've sent quite
a few hours because I really want to contribute, but it seems that it just
does not work on my MacBook. A co-worker did get the test suite to run on
his ubuntu machine. So, it's probably me.

I'm giving it a final try now. It's bothering me because the error is
blatantly obvious.

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

Django

unread,
Apr 29, 2017, 7:56:44 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: (none)
Type: Bug | Status: new

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Tim Graham):

If you copy `tests/test_sqlite.py` to `tests/test_spatialite.py` and
change the `'ENGINE'` in that file to
`'django.contrib.gis.db.backends.spatialite'`, you should be able to run
`./runtests.py --settings=test_spatialite gis_tests.test_geoforms`. Ping
me (timograham) in the #django-dev IRC channel if I can help further.

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

Django

unread,
Apr 29, 2017, 9:41:25 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+------------------------------------
Reporter: Dylan Verheul | Owner: (none)
Type: Bug | Status: new

Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Dylan Verheul):

Perseverance paid of. Got the tests to work as well as I could, enough to
make a testable PR

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

Django

unread,
Apr 29, 2017, 9:41:48 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: assigned
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Dylan Verheul):

* owner: (none) => Dylan Verheul


* status: new => assigned


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

Django

unread,
Apr 29, 2017, 9:42:35 AM4/29/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: assigned
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Dylan Verheul):

Pull request is https://github.com/django/django/pull/8439

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

Django

unread,
Apr 30, 2017, 1:08:07 AM4/30/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: assigned
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution:
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Dylan Verheul):

Is there anything else for me to do now that the Pull Request has been
committed?

--
Ticket URL: <https://code.djangoproject.com/ticket/28105#comment:10>

Django

unread,
Apr 30, 2017, 9:13:55 PM4/30/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: closed
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution: fixed
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham <timograham@…>):

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


Comment:

In [changeset:"75aeebebfe3df3ea46b8e12dd5e7719f98664d3a" 75aeebeb]:
{{{
#!CommitTicketReference repository=""
revision="75aeebebfe3df3ea46b8e12dd5e7719f98664d3a"
Fixed #28105 -- Fixed crash in BaseGeometryWidget.get_context() when
overriding existing attrs.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/28105#comment:11>

Django

unread,
May 1, 2017, 4:06:45 AM5/1/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: closed
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution: fixed
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

Comment (by Claude Paroz):

Was the backport to 1.11 omitted?

--
Ticket URL: <https://code.djangoproject.com/ticket/28105#comment:12>

Django

unread,
May 1, 2017, 7:22:23 AM5/1/17
to django-...@googlegroups.com
#28105: BaseGeometryWidget.get_context() crashes if attrs contains the name of an
existing key
-------------------------------------+-------------------------------------
Reporter: Dylan Verheul | Owner: Dylan
| Verheul
Type: Bug | Status: closed
Component: GIS | Version: 1.11
Severity: Release blocker | Resolution: fixed
Keywords: gis, forms, widgets | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

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

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

In [changeset:"b1aea89dee4598857aaa3847f996e7cd03316a10" b1aea89]:
{{{
#!CommitTicketReference repository=""
revision="b1aea89dee4598857aaa3847f996e7cd03316a10"
[1.11.x] Fixed #28105 -- Fixed crash in BaseGeometryWidget.get_context()
when overriding existing attrs.

Backport of 75aeebebfe3df3ea46b8e12dd5e7719f98664d3a from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/28105#comment:13>

Reply all
Reply to author
Forward
0 new messages