Bug #76748 | the server crash when test st_intersects with st_buffer | ||
---|---|---|---|
Submitted: | 20 Apr 2015 6:01 | Modified: | 22 Apr 2015 13:12 |
Reporter: | zkong kong | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: GIS | Severity: | S2 (Serious) |
Version: | 5.7.7-rc | OS: | Linux (centos4.3) |
Assigned to: | CPU Architecture: | Any |
[20 Apr 2015 6:01]
zkong kong
[20 Apr 2015 6:04]
zkong kong
the test data
Attachment: test.sql (application/octet-stream, text), 72.01 KiB.
[20 Apr 2015 6:16]
zkong kong
using gdb to debug the server found that in Gis_polygon::Gis_polygon inner_container_type v(wkb, nbytes, get_flags(), srid); the get_flags return value is not assigned to v third argument correctlly. Modify the Flags_t copy constructor then the test can pass. But I don't know why. 901,903c901,908 < compile_time_assert(sizeof(*this) == sizeof(uint64)); < *(reinterpret_cast<uint64 *>(this))= < *(reinterpret_cast<const uint64 *>(&o)); --- > this->bo= o.bo; > this->dim= o.dim; > this->nomem= o.nomem; > this->geotype= o.geotype; > this->nbytes= o.nbytes; > this->props= o.props; > this->zm= o.zm; > this->unused= o.unused;
[20 Apr 2015 6:27]
MySQL Verification Team
Version: '5.8.0-m17-asan' MySQL Community Server (GPL) Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fffd0bbd700 (LWP 6443)] in size (this=...) at spatial.h:2270 2270 return m_geo_vect ? m_geo_vect->size() : 0; (gdb) bt #0 in size (this=...) at spatial.h:2270 #1 in Gis_polygon_ring::set_ring_order at spatial.cc:1905 #2 in Gis_polygon::set_polygon_ring_order at spatial.cc:2044 #3 in Geometry::normalize_ring_order at spatial.cc:4353 #4 in bg_buffer at item_geofunc_buffer.cc:376 #5 in Item_func_buffer::val_str at item_geofunc_buffer.cc:598 #6 in Item_func_spatial_rel::val_int at item_geofunc_relchecks.cc:196 #7 in skip_record at sql_executor.h:455 #8 in JOIN_CACHE::check_match at sql_join_buffer.cc:2085 #9 in JOIN_CACHE::generate_full_extensions at sql_join_buffer.cc:2034 #10 in JOIN_CACHE_BNL::join_matching_records at sql_join_buffer.cc:1924 #11 in JOIN_CACHE::join_records at sql_join_buffer.cc:1729 #12 in sub_select_op at sql_executor.cc:1052 #13 in do_select at sql_executor.cc:935 #14 in JOIN::exec at sql_executor.cc:198 #15 in handle_query at sql_select.cc:185 #16 in execute_sqlcom_select at sql_parse.cc:4690 #17 in mysql_execute_command at sql_parse.cc:2418 #18 in mysql_parse at sql_parse.cc:5110 #19 in dispatch_command at sql_parse.cc:1213 #20 in do_command at sql_parse.cc:797 #21 in handle_connection at connection_handler_per_thread.cc:299 #22 in pfs_spawn_thread at pfs.cc:2147 #23 in start_thread () from /usr/lib64/libpthread.so.0 #24 in clone () from /usr/lib64/libc.so.6
[20 Apr 2015 6:35]
MySQL Verification Team
Thanks for the report! Affects 5.7 and 5.8. Might have to use ASAN build to repeat the crashes.
[22 Apr 2015 13:12]
Paul DuBois
Noted in 5.7.8, 5.8.0 changelogs. Unaligned memory access could cause spatial operations to fail.