Skip to content

Commit 8147d2e

Browse files
author
Alexey Botchkov
committed
MDEV-25461 Assertion `je->state == JST_KEY' failed in Geometry::create_from_json.
Handle invalid GEOJSON-s in Geometry::create_from_json().
1 parent 4e4f742 commit 8147d2e

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

mysql-test/r/gis-json.result

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ Warning 4076 Incorrect GeoJSON format - empty 'coordinates' array.
107107
SELECT ST_GEOMFROMGEOJSON("{ \"type\": \"Feature\", \"geometry\": [10, 20] }");
108108
ST_GEOMFROMGEOJSON("{ \"type\": \"Feature\", \"geometry\": [10, 20] }")
109109
NULL
110+
SELECT ST_ASTEXT (ST_GEOMFROMGEOJSON ('{ "type": "GEOMETRYCOLLECTION", "coordinates": [102.0, 0.0]}'));
111+
ST_ASTEXT (ST_GEOMFROMGEOJSON ('{ "type": "GEOMETRYCOLLECTION", "coordinates": [102.0, 0.0]}'))
112+
NULL
113+
Warnings:
114+
Warning 4048 Incorrect GeoJSON format specified for st_geomfromgeojson function.
115+
SELECT ST_ASTEXT(ST_GEOMFROMGEOJSON('{"type": ["POINT"], "coINates": [0,0] }'));
116+
ST_ASTEXT(ST_GEOMFROMGEOJSON('{"type": ["POINT"], "coINates": [0,0] }'))
117+
NULL
118+
Warnings:
119+
Warning 4048 Incorrect GeoJSON format specified for st_geomfromgeojson function.
110120
#
111121
# End of 10.2 tests
112122
#

mysql-test/t/gis-json.test

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ SELECT st_astext(st_geomfromgeojson('{"type": "MultiPolygon","coordinates": []}'
4646

4747
SELECT ST_GEOMFROMGEOJSON("{ \"type\": \"Feature\", \"geometry\": [10, 20] }");
4848

49+
#
50+
# MDEV-25461 Assertion `je->state == JST_KEY' failed in Geometry::create_from_json.
51+
#
52+
53+
SELECT ST_ASTEXT (ST_GEOMFROMGEOJSON ('{ "type": "GEOMETRYCOLLECTION", "coordinates": [102.0, 0.0]}'));
54+
55+
SELECT ST_ASTEXT(ST_GEOMFROMGEOJSON('{"type": ["POINT"], "coINates": [0,0] }'));
4956
--echo #
5057
--echo # End of 10.2 tests
5158
--echo #

sql/spatial.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,11 @@ Geometry *Geometry::create_from_json(Geometry_buffer *buffer,
539539
goto handle_geometry_key;
540540
feature_type_found= 1;
541541
}
542+
else /* can't understand the type. */
543+
break;
542544
}
545+
else /* The "type" value can only be string. */
546+
break;
543547
}
544548
else if (key_len == coord_keyname_len &&
545549
memcmp(key_buf, coord_keyname, coord_keyname_len) == 0)
@@ -556,6 +560,8 @@ Geometry *Geometry::create_from_json(Geometry_buffer *buffer,
556560
coord_start= je->value_begin;
557561
if (ci && ci != &geometrycollection_class)
558562
goto create_geom;
563+
if (json_skip_level(je))
564+
goto err_return;
559565
}
560566
}
561567
else if (key_len == geometries_keyname_len &&

0 commit comments

Comments
 (0)