mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 11:57:38 +02:00
Bug #30286 spatial index cause corruption and server crash!
As the result of DOUBLE claculations can be bigger than DBL_MAX constant we use in code, we shouldn't use this constatn as a biggest possible value. Particularly the rtree_pick_key function set 'min_area= DBL_MAX' relying that any rtree_area_increase result will be less so we return valid key. Though in rtree_area_increase function we calculate the area of the rectangle, so the result can be 'inf' if the rectangle is huge enough, which is bigger than DBL_MAX. Code of the rtree_pick_key modified so we always return a valid key. myisam/rt_index.c: Bug #30286 spatial index cause corruption and server crash! always set the best_key with the first key we get, so we always return somthing valid. myisam/rt_mbr.c: Bug #30286 spatial index cause corruption and server crash! function comment extended mysql-test/r/gis-rtree.result: Bug #30286 spatial index cause corruption and server crash! test result mysql-test/t/gis-rtree.test: Bug #30286 spatial index cause corruption and server crash! test case
This commit is contained in:
parent
a3d5f64c92
commit
6d54b5771b
4 changed files with 76 additions and 14 deletions
|
|
@ -525,7 +525,10 @@ double rtree_overlapping_area(HA_KEYSEG *keyseg, uchar* a, uchar* b,
|
|||
}
|
||||
|
||||
/*
|
||||
Calculates MBR_AREA(a+b) - MBR_AREA(a)
|
||||
Calculates MBR_AREA(a+b) - MBR_AREA(a)
|
||||
Note: when 'a' and 'b' objects are far from each other,
|
||||
the area increase can be really big, so this function
|
||||
can return 'inf' as a result.
|
||||
*/
|
||||
double rtree_area_increase(HA_KEYSEG *keyseg, uchar* a, uchar* b,
|
||||
uint key_length, double *ab_area)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue