mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
The dynamic column integer decoders derive the shift exponent from the data interval length without bounding it to the 64-bit type width. dynamic_column_uint_read() loops over the interval doing value+= data[i] << (i*8). A record whose integer column has an interval longer than 8 bytes drives i*8 to 64 and past it, which is undefined and aborts under -fsanitize=shift. dynamic_column_var_uint_get(), used for the charset id of a string value and for the intg/frac of a decimal, has the same defect: length*7 grows without bound over a run of 0x80 continuation bytes. Reject integers longer than 8 bytes with ER_DYNCOL_FORMAT, propagate that through dynamic_column_sint_read(), and cap the varint loop at 10 groups. To reproduce, build with -fsanitize=shift and read with COLUMN_GET() a record whose integer column data interval exceeds 8 bytes; the shift exponent reaches 64 in dynamic_column_uint_read(). A new case in the ma_dyncol unit test crafts such a record and checks it is rejected.
Unit tests directory structure
------------------------------
This is the current structure of the unit tests. More directories
will be added over time.
mytap Source for the MyTAP library
mysys Tests for mysys components
bitmap-t.c Unit test for MY_BITMAP
base64-t.c Unit test for base64 encoding functions
examples Example unit tests.
core-t.c Example of raising a signal in the middle of the test
THIS TEST WILL STOP ALL FURTHER TESTING!
simple-t.c Example of a standard TAP unit test
skip-t.c Example where some test points are skipped
skip_all-t.c Example of a test where the entire test is skipped
todo-t.c Example where test contain test points that are TODO
no_plan-t.c Example of a test with no plan (avoid this)
Executing unit tests
--------------------
To make and execute all unit tests in the directory:
make test
Observe that the tests in the examples/ directory are just various
examples of tests and are not expected to pass.
Adding unit tests
-----------------
Add a file with a name of the format "foo-t.c" to the appropriate
directory and add the following to the Makefile.am in that directory
(where ... denotes stuff already there):
noinst_PROGRAMS = ... foo-t
Note, it's important to have "-t" at the end of the filename, otherwise the
test won't be executed by 'make test' !
Documentation
-------------
The generated documentation is temporarily placed at:
http://www.kindahl.net/mytap/doc/
I will move it to a better place once I figure out where and how.