summaryrefslogtreecommitdiff
path: root/strings/json_lib.c
Commit message (Collapse)AuthorAgeFilesLines
* MDEV-23187: Assorted assertion failures in json_find_path with certainbb-10.4-MDEV-23187Rucha Deodhar2023-05-161-1/+1
| | | | | | | | | | | collations Fix by Alexey Botchkov The 'value_len' is calculated wrong for the multibyte charsets. In the read_strn() function we get the length of the string with the final ' " ' character. So have to subtract it's length from the value_len. And the length of '1' isn't correct for the ucs2 charset (must be 2).
* MDEV-26817 runtime error: index 24320 out of bounds for type ↵Sergei Golubchik2023-01-201-1/+1
| | | | | | | | 'json_string_char_classes [128] *and* ASAN: global-buffer-overflow on address ... READ of size 4 on SELECT JSON_VALID protect from out-of-bound array access it was already done in all other places, this one was the only one missed
* Merge branch '10.3' into 10.4Oleksandr Byelkin2022-07-271-101/+0
|\
| * MDEV-28762: recursive call of some json functions without stack controlRucha Deodhar2022-07-201-101/+0
| | | | | | | | | | | | Analysis: Some recursive json functions dont check for stack control Fix: Add check_stack_overrun(). The last argument is NULL because it is not used
* | Fix all warnings given by UBSANMonty2021-04-201-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The easiest way to compile and test the server with UBSAN is to run: ./BUILD/compile-pentium64-ubsan and then run mysql-test-run. After this commit, one should be able to run this without any UBSAN warnings. There is still a few compiler warnings that should be fixed at some point, but these do not expose any real bugs. The 'special' cases where we disable, suppress or circumvent UBSAN are: - ref10 source (as here we intentionally do some shifts that UBSAN complains about. - x86 version of optimized int#korr() methods. UBSAN do not like unaligned memory access of integers. Fixed by using byte_order_generic.h when compiling with UBSAN - We use smaller thread stack with ASAN and UBSAN, which forced me to disable a few tests that prints the thread stack size. - Verifying class types does not work for shared libraries. I added suppression in mysql-test-run.pl for this case. - Added '#ifdef WITH_UBSAN' when using integer arithmetic where it is safe to have overflows (two cases, in item_func.cc). Things fixed: - Don't left shift signed values (byte_order_generic.h, mysqltest.c, item_sum.cc and many more) - Don't assign not non existing values to enum variables. - Ensure that bool and enum values are properly initialized in constructors. This was needed as UBSAN checks that these types has correct values when one copies an object. (gcalc_tools.h, ha_partition.cc, item_sum.cc, partition_element.h ...) - Ensure we do not called handler functions on unallocated objects or deleted objects. (events.cc, sql_acl.cc). - Fixed bugs in Item_sp::Item_sp() where we did not call constructor on Query_arena object. - Fixed several cast of objects to an incompatible class! (Item.cc, Item_buff.cc, item_timefunc.cc, opt_subselect.cc, sql_acl.cc, sql_select.cc ...) - Ensure we do not do integer arithmetic that causes over or underflows. This includes also ++ and -- of integers. (Item_func.cc, Item_strfunc.cc, item_timefunc.cc, sql_base.cc ...) - Added JSON_VALUE_UNITIALIZED to json_value_types and ensure that value_type is initialized to this instead of to -1, which is not a valid enum value for json_value_types. - Ensure we do not call memcpy() when second argument could be null. - Fixed that Item_func_str::make_empty_result() creates an empty string instead of a null string (safer as it ensures we do not do arithmetic on null strings). Other things: - Changed struct st_position to an OBJECT and added an initialization function to it to ensure that we do not copy or use uninitialized members. The change to a class was also motived that we used "struct st_position" and POSITION randomly trough the code which was confusing. - Notably big rewrite in sql_acl.cc to avoid using deleted objects. - Changed in sql_partition to use '^' instead of '-'. This is safe as the operator is either 0 or 0x8000000000000000ULL. - Added check for select_nr < INT_MAX in JOIN::build_explain() to avoid bug when get_select() could return NULL. - Reordered elements in POSITION for better alignment. - Changed sql_test.cc::print_plan() to use pointers instead of objects. - Fixed bug in find_set() where could could execute '1 << -1'. - Added variable have_sanitizer, used by mtr. (This variable was before only in 10.5 and up). It can now have one of two values: ASAN or UBSAN. - Moved ~Archive_share() from ha_archive.cc to ha_archive.h and marked it virtual. This was an effort to get UBSAN to work with loaded storage engines. I kept the change as the new place is better. - Added in CONNECT engine COLBLK::SetName(), to get around a wrong cast in tabutil.cpp. - Added HAVE_REPLICATION around usage of rgi_slave, to get embedded server to compile with UBSAN. (Patch from Marko). - Added #ifdef for powerpc64 to avoid a bug in old gcc versions related to integer arithmetic. Changes that should not be needed but had to be done to suppress warnings from UBSAN: - Added static_cast<<uint16_t>> around shift to get rid of a LOT of compiler warnings when using UBSAN. - Had to change some '/' of 2 base integers to shift to get rid of some compile time warnings. Reviewed by: - Json changes: Alexey Botchkov - Charset changes in ctype-uca.c: Alexander Barkov - InnoDB changes & Embedded server: Marko Mäkelä - sql_acl.cc changes: Vicențiu Ciorbaru - build_explain() changes: Sergey Petrunia
* | Merge 10.3 into 10.4Marko Mäkelä2020-10-291-1/+1
|\ \ | |/
| * Merge 10.2 into 10.3Marko Mäkelä2020-10-281-1/+1
| |\
| | * MDEV-23941: strings/json_lib.c:893:12: style: Suspicious conditionVicențiu Ciorbaru2020-10-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The characters parsed are always ascii characters, hence one byte. This means that the code did not have "incorrect" logic because the boolean condition, if true, would also evaluate to the value of 1. The condition however is semantically wrong, assuming a length is equal to the condition outcome. Change paranthesis to make it also read according to the intent.
* | | MDEV-5313: Fix GCC 10 -Wenum-conversionMarko Mäkelä2020-03-161-1/+9
| | |
* | | Fixed compiler warnings from gcc 7.4.1Monty2020-01-291-3/+7
| | | | | | | | | | | | - Fixed possible error in rocksdb/rdb_datadic.cc
* | | Merge remote-tracking branch 'origin/10.3' into 10.4Alexander Barkov2019-10-011-0/+5
|\ \ \ | |/ /
| * | MDEV-19628 JSON with starting double quotes key is not valid.Alexey Botchkov2019-09-301-1/+4
| | | | | | | | | | | | Make the skip_key a bit faster.
| * | MDEV-19628 JSON with starting double quotes key is not valid.Alexey Botchkov2019-09-301-0/+2
| | | | | | | | | | | | | | | First character of the key name is just skipped, so the escapement wasn't handled properly.
* | | Merge 10.3 into 10.4Marko Mäkelä2019-09-121-1/+3
|\ \ \ | |/ /
| * | MDEV-19670 json escaped unicode parse error.Alexey Botchkov2019-09-121-1/+3
| | | | | | | | | | | | Fixed 4-byte length characters handled incorrectly.
* | | Merge 10.3 into 10.4Marko Mäkelä2019-04-021-4/+2
|\ \ \ | |/ /
| * | Merge branch '10.2' into 10.3Sergei Golubchik2019-03-291-3/+2
| |\ \ | | |/
| | * post-merge: -Werror fixes in 10.2Sergei Golubchik2019-03-291-2/+2
| | |
* | | MDEV-5313 Improving audit API.Alexey Botchkov2019-01-181-2/+92
| | | | | | | | | | | | | | | json_locate_key() implemented. get rid of 'key_len' argument in functions.
* | | MDEV-5313 Improving audit plugin API.Alexey Botchkov2019-01-171-1/+1
| | | | | | | | | | | | Type conversion bug fixed.
* | | MDEV-5313 Improving audit api.Alexey Botchkov2019-01-171-49/+96
| | | | | | | | | | | | | | | JSON api implementations and tests pushed. sql_acl.cc fixed with the new function names.
* | | json helpersSergei Golubchik2018-12-121-0/+81
| | |
* | | MDEV-5313 Improving audit api.Alexey Botchkov2018-12-121-0/+32
|/ / | | | | | | Service added to handle json.
* | Merge 10.2 into 10.3Marko Mäkelä2018-11-191-1/+1
|\ \ | |/
| * MDEV-17454 JSON_VALID( '{"a":1]' ) evaluates to 1.Alexey Botchkov2018-11-121-1/+1
| | | | | | | | Produce syntax error when '{...]'.
* | Merge branch '10.2' into 10.3Sergei Golubchik2018-09-281-0/+21
|\ \ | |/
| * MDEV-17001 JSON_MERGE returns nullwhen merging empty array.Alexey Botchkov2018-09-131-4/+0
| | | | | | | | Don't add the comma if nothing appended to the array.
| * MDEV-17121 JSON_ARRAY_APPEND.Alexey Botchkov2018-09-111-0/+25
| | | | | | | | Extra comma added to the result when an json array is empty.
* | Merge 10.2 into 10.3Marko Mäkelä2018-08-031-0/+2
|\ \ | |/
| * MDEV-16054 simple json functions flatline cpu on garbage input.Alexey Botchkov2018-07-311-0/+2
| | | | | | | | Incorrect char sentence should be handled properly.
| * MDEV-15561 json_extract returns NULL with numbers in scientific notation.Alexey Botchkov2018-03-251-2/+2
| | | | | | | | Scientific notation handling fixed.
* | Misc. typosluz.paz2018-04-051-1/+1
| | | | | | | | Found via `codespell -i 3 -w --skip="./debian/po" -I ../mariadb-server-word-whitelist.txt ./cmake/ ./debian/ ./Docs/ ./include/ ./man/ ./plugin/ ./strings/`
* | MDEV-15561 json_extract returns NULL with numbers in scientific notation.Alexey Botchkov2018-03-251-2/+2
| | | | | | | | | | | | | | | | Scientific notation handling fixed. Conflicts: mysql-test/r/func_json.result mysql-test/t/func_json.test
* | Remove compiler warningsMonty2017-12-031-2/+2
| |
* | Merge bb-10.2-ext into 10.3Marko Mäkelä2017-11-301-1/+1
|\ \ | |/
| * MDEV-13971 crash in skip_num_constant.Alexey Botchkov2017-11-111-1/+1
| | | | | | | | | | Character bigger than 0x60 wasn't handled properly inside a numeric constant.
* | Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3Alexander Barkov2017-10-301-1/+1
|\ \ | |/ | | | | TODO: enable MDEV-13049 optimization for 10.3
| * MDEV-12312 JSON_CONTAINS_PATH does not detect invalid path and returnsAlexey Botchkov2017-10-061-1/+1
| | | | | | | | | | | | | | TRUE. Let's make empty brackets to be the syntax error in the JSON paths.
* | Merge bb-10.2-ext into 10.3Marko Mäkelä2017-10-041-5/+5
|\ \ | |/
| * MDEV-13384 - misc Windows warnings fixedVladislav Vaintroub2017-09-281-5/+5
| |
* | Merge bb-10.2-ext into 10.3Marko Mäkelä2017-09-181-4/+5
|\ \ | |/
| * Make compiler happy with the 'fall through' comments.Alexey Botchkov2017-09-141-3/+4
| |
| * Compiler warning avoided.Alexey Botchkov2017-09-141-1/+1
| |
* | Merge bb-10.2-ext into 10.3Marko Mäkelä2017-09-141-1/+1
|\ \ | |/
| * MDEV-13138 JSON_OBJECT returns null with strings containing backticks.Alexey Botchkov2017-09-121-1/+1
| | | | | | | | Condition was fixed.
* | Enusure that my_global.h is included firstMichael Widenius2017-08-241-2/+0
|/ | | | | | | | | | - Added sql/mariadb.h file that should be included first by files in sql directory, if sql_plugin.h is not used (sql_plugin.h adds SHOW variables that must be done before my_global.h is included) - Removed a lot of include my_global.h from include files - Removed include's of some files that my_global.h automatically includes - Removed duplicated include's of my_sys.h - Replaced include my_config.h with my_global.h
* MDEV-12604 Comparison of JSON_EXTRACT result differs with Mysql.Alexey Botchkov2017-08-081-1/+1
| | | | | Comparison fixed to take the actual type of JSON value into account. Bug in escaping handling fixed.
* MDEV-12324 Wrong result (phantom array value) on JSON_EXTRACT.Alexey Botchkov2017-08-071-1/+1
| | | | Fixed the path comparison.
* MDEV-12351 Assertion `cur_step->type & JSON_PATH_KEY' failed inAlexey Botchkov2017-05-021-0/+1
| | | | | | | json_find_path. The ..[0] path can be treated wrong on second json_find_path call.
* MDEV-11856 json_search doesn't search for values with double quotesAlexey Botchkov2017-03-141-0/+2
| | | | | | | | character ("). The my_wildcmp function doesn't expect the string parameter to have escapements, only the template. So the string should be unescaped if necessary.