Opened 13 years ago
Last modified 8 years ago
#1339 new defect
Corrupted Shapefile causes buffer overflows, assetions etc.
| Reported by: | marisn | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | 6.4.6 |
| Component: | Vector | Version: | svn-releasebranch64 |
| Keywords: | rtree | Cc: | |
| CPU: | Unspecified | Platform: | Unspecified |
Description
One of my students managed to create a slightly corrupted shapefile. ArcGIS and QuantumGIS manage to deal with this file. OGR reports one of points having coordinates 0,0. File extent is reported as correct one - corrupted point lies outside of extent. Tested on Gentoo ~AMD64.
Part of OGRINFO output:
Layer name: augstumpunkti1
Geometry: Point
Feature Count: 60
Extent: (520046.672571, 6302258.489785) - (576734.883380, 6313825.790398)
Layer SRS WKT:
PROJCS["GRS_1980_Transverse_Mercator",
GEOGCS["GCS_GRS_1980",
DATUM["Not_specified_based_on_GRS_1980_ellipsoid",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting",500000.0],
PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",24.0],
PARAMETER["Scale_Factor",0.9996],
PARAMETER["Latitude_Of_Origin",0.0],
UNIT["Meter",1.0]]
....
OGRFeature(augstumpunkti1):43
Id (Integer) = 0
augstums (Real) = 80.00000000000
POINT (563662.082802134566009 6309812.449835392646492)
OGRFeature(augstumpunkti1):44
Id (Integer) = 0
augstums (Real) = 90.00000000000
POINT (0 0)
OGRFeature(augstumpunkti1):45
Id (Integer) = 0
augstums (Real) = 82.80000000000
POINT (565468.073194714379497 6308844.121653324924409)
GRASS 7 imports this file just fine, but almost everything touching this file fails.
v.out.ascii
563662.08280213|6309812.44983539|44 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368|-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368|45 565468.07319471|6308844.12165332|46
v.in.ogr in 6.5:
Building topology for vector map <augst3_tmp>... Registering primitives... v.in.ogr: split_q.c:69: RTreeClassify: Assertion `!p->taken[i]' failed. Aborted
Attachments (1)
Change History (5)
comment:1 by , 13 years ago
| Keywords: | rtree added |
|---|
by , 13 years ago
| Attachment: | broken_shapefile.zip added |
|---|
follow-up: 3 comment:2 by , 12 years ago
| Milestone: | 6.4.2 → 6.4.3 |
|---|---|
| Version: | unspecified → svn-releasebranch64 |
I imported the attached file into GRASS 70: v.in.ogr worked. Then I tried
v.out.ascii augstumpunkti1 ... *** glibc detected *** v.out.ascii: realloc(): invalid next size: 0x0000000001409a00 *** ...
It crashes in GRASS 7.svn r52794 in lib/vector/Vlib/ascii.c, line 529 (G_rasprintf())
Import with 6.4.svn still fails:
GRASS 6.4.3svn (PERMANENT):/tmp/broken_shapefile > v.in.ogr augstumpunkti1.shp out=augstumpunkti1 --o
WARNING: Datum <Not_specified_based_on_GRS_1980_ellipsoid> not recognised
by GRASS and no parameters found
Projection of input dataset and current location appear to match
WARNING: Vector map <augstumpunkti1> already exists and will be overwritten
Layer: augstumpunkti1
Counting polygons for 60 features...
Importing map 60 features...
100%
-----------------------------------------------------
Building topology for vector map <augstumpunkti1_tmp>...
Registering primitives...
v.in.ogr: split_q.c:69: RTreeClassify: Assertion `!p->taken[i]' failed.
Aborted (core dumped)
comment:3 by , 12 years ago
Replying to neteler:
I imported the attached file into GRASS 70: v.in.ogr worked. Then I tried
v.out.ascii augstumpunkti1 ... *** glibc detected *** v.out.ascii: realloc(): invalid next size: 0x0000000001409a00 *** ...
Fixed in trunk r52805. OGR seems to know the correct extents, so v.in.ogr uses these extents as spatial filter. The bogus point is now skipped. Of course the spatial option and -r flag are still respected. Backport? Or are such broken input data too rare?
Markus M
comment:4 by , 8 years ago
| Milestone: | 6.4.3 → 6.4.6 |
|---|

Sample file for testing