[2.0.x] Fixed #29959 -- Cached GEOS version in WKBWriter class.

Regression in f185d929fa.
Backport of e7e5505902 from master.
This commit is contained in:
Claude Paroz 2018-11-16 15:10:33 +01:00 committed by Tim Graham
parent 6d9b1e5706
commit 3cc125b582
3 changed files with 9 additions and 4 deletions

View File

@ -213,6 +213,7 @@ class WKBWriter(IOBase):
_constructor = wkb_writer_create
ptr_type = WKB_WRITE_PTR
destructor = wkb_writer_destroy
geos_version = geos_version_tuple()
def __init__(self, dim=2):
super().__init__()
@ -235,7 +236,7 @@ class WKBWriter(IOBase):
from django.contrib.gis.geos import Polygon
geom = self._handle_empty_point(geom)
wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))
if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
if self.geos_version < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
# Fix GEOS output for empty polygon.
# See https://trac.osgeo.org/geos/ticket/680.
wkb = wkb[:-8] + b'\0' * 4
@ -246,7 +247,7 @@ class WKBWriter(IOBase):
from django.contrib.gis.geos.polygon import Polygon
geom = self._handle_empty_point(geom)
wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
if self.geos_version < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
wkb = wkb[:-16] + b'0' * 8
return wkb

View File

@ -9,4 +9,6 @@ Django 1.11.17 fixes several bugs in 1.11.16.
Bugfixes
========
* ...
* Prevented repetitive calls to ``geos_version_tuple()`` in the ``WKBWriter``
class in an attempt to fix a random crash involving ``LooseVersion`` since
Django 1.11.14 (:ticket:`29959`).

View File

@ -9,4 +9,6 @@ Django 2.0.10 fixes several bugs in 2.0.9.
Bugfixes
========
* ...
* Prevented repetitive calls to ``geos_version_tuple()`` in the ``WKBWriter``
class in an attempt to fix a random crash involving ``LooseVersion`` since
Django 2.0.6 (:ticket:`29959`).