Skip to content
Snippets Groups Projects
  1. Oct 31, 2022
  2. Oct 28, 2022
  3. Oct 26, 2022
    • Vladimir Davydov's avatar
      msgpack: fix crash on decode of 0xc1 · e48a8f4b
      Vladimir Davydov authored
      0xc1 isn't a valid MsgPack header, but it was allowed by mp_check.
      As a result, msgpack.decode crashed while trying to decode it.
      This commit updates the msgpuck library to fix this issue.
      
      Closes #7818
      
      NO_DOC=bug fix
      
      (cherry picked from commit ced405af)
      e48a8f4b
  4. Oct 25, 2022
    • Serge Petrenko's avatar
      security: make os.getenv safe · ec3eb525
      Serge Petrenko authored
      Closes #7797
      
      NO_DOC=security fix
      NO_TEST=security fix
      
      (cherry picked from commit dd7d46af)
      ec3eb525
    • Serge Petrenko's avatar
      security: check size boundaries for getenv() returns · 829b65f8
      Serge Petrenko authored
      getenv() return values cannot be trusted, because an attacker might set
      them. For instance, we shouldn't expect, that getenv() returns a value
      of some sane size.
      
      Another problem is that getenv() returns a pointer to one of
      `char **environ` members, which might change upon next setenv().
      
      Introduce a wrapper, getenv_safe(), which returns the value only when
      it fits in a buffer of a specified size, and copies the value onto the
      buffer. Use this wrapper everywhere in our code.
      
      Below's a slightly decorated output of `grep -rwn getenv ./src --include
      *.c --include *.h --include *.cc --include *.cpp --include *.hpp
      --exclude *.lua.c` as of 2022-10-14.
      `-` marks invalid occurences (comments, for example),
      `*` marks the places that are already guarded before this patch,
      `X` mars the places guarded in this patch, and
      `^` marks places fixed in the next commit:
      
      NO_WRAP
      ```
      * ./src/lib/core/coio_file.c:509:	const char *tmpdir = getenv("TMPDIR");
      X ./src/lib/core/errinj.c:75: const char *env_value = getenv(inj->name);
      - ./src/proc_title.c:202: * that might try to hang onto a getenv() result.)
      - ./src/proc_title.c:241:	* is mandatory to flush internal libc caches on getenv/setenv
      X ./src/systemd.c:54: sd_unix_path = getenv("NOTIFY_SOCKET");
      * ./src/box/module_cache.c:300: const char *tmpdir = getenv("TMPDIR");
      X ./src/box/sql/os_unix.c:1441: azDirs[0] = getenv("SQL_TMPDIR");
      X ./src/box/sql/os_unix.c:1446: azDirs[1] = getenv("TMPDIR");
      * ./src/box/lua/console.c:394: const char *envvar = getenv("TT_CONSOLE_HIDE_SHOW_PROMPT");
      ^ ./src/box/lua/console.lua:771: local home_dir = os.getenv('HOME')
      ^ ./src/box/lua/load_cfg.lua:1007: local raw_value = os.getenv(env_var_name)
      X ./src/lua/init.c:575: const char *path = getenv(envname);
      X ./src/lua/init.c:592: const char *home = getenv("HOME");
      * ./src/find_path.c:77: snprintf(buf, sizeof(buf) - 1, "%s", getenv("_"));
      ```
      NO_WRAP
      
      Part-of #7797
      
      NO_DOC=security
      
      (cherry picked from commit b86395ff)
      829b65f8
    • Mergen Imeev's avatar
      sql: fix another cursor invalidation · 1b357d93
      Mergen Imeev authored
      This patch fixes the issue described in issue #5310 when the tuple
      format has more fields than the space format. This solution is more
      general than the solution in 89057a21.
      
      Follow-up #5310
      Closes #4666
      
      NO_DOC=bugfix
      
      (cherry picked from commit 5a38c5c9)
      1b357d93
  5. Oct 21, 2022
    • Georgiy Lebedev's avatar
      build: use relative paths in diagnostics and debugging information · ac645aa4
      Georgiy Lebedev authored
      Since our diagnostics use the `__FILE__` macro, they provide absolute
      paths, which is kind of redundant and inconsistent: replace them with
      relative ones.
      
      As for debugging information, replacing absolute paths with relative ones
      also requires an extra command to tell the debugger where to find the
      source files, which is not convenient for developers: provide a new
      `DEV_BUILD` option (turned off by default), which replaces absolute paths
      with relative ones in debugging information if turned off.
      
      Strip the prefix map flags from compiler flags exported to tarantool via
      `src/trvia/config.h`.
      
      Closes #7808
      
      NO_DOC=<verbosity>
      NO_TEST=<verbosity>
      
      (cherry picked from commit 256da010)
      ac645aa4
    • Georgiy Lebedev's avatar
      test-run: bump new version · bfa153bb
      Georgiy Lebedev authored
      Fixes bug with determination of debug build (tarantool/test-run#352).
      
      NO_CHANGELOG=<internal submodule version update>
      NO_TEST=<submodule version update>
      NO_DOC=<submodule version update>
      
      (cherry picked from commit e554e481)
      bfa153bb
    • Georgiy Lebedev's avatar
      build: refactor setting hardening compiler flags · 0b47b16e
      Georgiy Lebedev authored
      Setting hardening compiler flags is used in three places: default build,
      static build and enterprise build — refactor it into a separate module.
      
      Follow-up e6abe1c9
      
      NO_CHANGELOG=refactoring
      NO_DOC=refactoring
      NO_TEST=refactoring
      
      (cherry picked from commit dd51a2fa)
      0b47b16e
    • Georgiy Lebedev's avatar
      build: refactor passing compiler flags to dependencies · 2a61c0a7
      Georgiy Lebedev authored
      e6abe1c9 passes compiler flags to dependencies via a `<project>_build` macro
      parameter, which is, firstly, inconvenient, and, secondly, as a result, not
      all dependencies got the required compiler flags passed: use global
      variables instead and pass these flags to skipped dependencies.
      
      Follow-up e6abe1c9
      
      NO_CHANGELOG=refactoring
      NO_DOC=refactoring
      NO_TEST=refactoring
      
      (cherry picked from commit c6794757)
      2a61c0a7
    • Georgiy Lebedev's avatar
      build: fix unsetting of variables in `add_compile_flags` macro · d5e9d14c
      Georgiy Lebedev authored
      `add_compile_flags` macro relied on undefined behaviour: instead of
      unsetting the `_lang` and `_flag` variables, it tried to unset their
      values — fix this.
      
      NO_CHANGELOG=build
      NO_DOC=build
      NO_TEST=build
      
      (cherry picked from commit 4aa9f154)
      d5e9d14c
  6. Oct 20, 2022
    • Sergey Bronnokov's avatar
      ci: enable code coverage job in default ci · 01bf1e21
      Sergey Bronnokov authored
      Information about test code coverage is useful on code review.
      This patch enables code coverage job in default ci.
      
      NO_CHANGELOG=not a user-visible change
      NO_DOC=not a user-visible change
      NO_TEST=ci
      
      (cherry picked from commit 66e388e8)
      01bf1e21
    • Andrey Saranchin's avatar
      box: unify errors about mismatch of password and login during auth · e8705a65
      Andrey Saranchin authored
      If we raise different errors in case of entering an invalid password and
      entering the login of a non-existent user during authorization, it will
      open the door for an unauthorized person to enumerate users.
      So let's unify raised errors in the cases described above.
      
      Closes #tarantool/security#16
      
      NO_DOC=security fix
      
      (cherry picked from commit 5c62f01b)
      e8705a65
  7. Oct 19, 2022
    • Mergen Imeev's avatar
      box: fix format of _vfunc · ee06f892
      Mergen Imeev authored
      The _vfunc system space is the sysview for the _func system space.
      However, the _vfunc format is different from the _func format. This
      patch makes the _vfunc format the same as the _func format.
      
      Closes #7822
      
      NO_DOC=bugfix
      
      (cherry picked from commit 707da125)
      ee06f892
  8. Oct 18, 2022
    • Timur Safin's avatar
      datetime: datetimes subtractions ignored timezone · 8aa13474
      Timur Safin authored
      We used to ignore timezone difference (in `tzoffset`) for
      datetime subtraction operation:
      
      ```
      tarantool> datetime.new{tz='MSK'} - datetime.new{tz='UTC'}
      ---
      - +0 seconds
      ...
      
      tarantool> datetime.new{tz='MSK'}.timestamp -
                 datetime.new{tz='UTC'}.timestamp
      ---
      - -10800
      ...
      ```
      
      Now we accumulate tzoffset difference in the minute component
      of a resultant interval:
      
      ```
      tarantool> datetime.new{tz='MSK'} - datetime.new{tz='UTC'}
      ---
      - -180 minutes
      ...
      ```
      
      Closes #7698
      
      NO_DOC=bugfix
      
      (cherry picked from commit 0daed8d5)
      8aa13474
    • Timur Safin's avatar
      datetime: fix interval arithmetic for DST · 9f8b05ab
      Timur Safin authored
      We did not take into consideration the fact that
      as result of date/time arithmetic we could get
      in a different timezone, if DST boundary has been
      crossed during operation.
      
      ```
      tarantool> datetime.new{year=2008, month=1, day=1,
      			tz='Europe/Moscow'} +
      	   datetime.interval.new{month=6}
      ---
      - 2008-07-01T01:00:00 Europe/Moscow
      ...
      ```
      
      Now we resolve tzoffset at the end of operation if
      tzindex is not 0.
      
      Fixes #7700
      
      NO_DOC=bugfix
      
      (cherry picked from commit 6ca07285)
      9f8b05ab
    • Yaroslav Lobankov's avatar
      ci: use `coveralls-lcov` instead of GitHub action · abba4f80
      Yaroslav Lobankov authored
      In PR #7791 the coverage stuff is slightly updated. The changes are
      related to excluding some directories where the coverage will not be
      calculated. The patch itself is straightforward enough, but I can see
      the problems with uploading the results to coveralls.io:
      
      NO_WRAP
          Using lcov file: ./coverage.info
          FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
      
          <--- Last few GCs --->
      
          [2683200:0x327c000]    27836 ms: Scavenge 2033.4 (2038.7) -> 2033.2 (2044.2) MB, 6.8 / 0.0 ms  (average mu = 0.258, current mu = 0.243) allocation failure
          [2683200:0x327c000]    27854 ms: Scavenge 2036.7 (2044.2) -> 2037.1 (2044.4) MB, 15.6 / 0.0 ms  (average mu = 0.258, current mu = 0.243) allocation failure
          [2683200:0x327c000]    27871 ms: Scavenge 2037.2 (2044.4) -> 2036.7 (2055.9) MB, 17.1 / 0.0 ms  (average mu = 0.258, current mu = 0.243) allocation failure
      
          <--- JS stacktrace --->
      
          ==== JS stack trace =========================================
      
              0: ExitFrame [pc: 0x140dc19]
          Security context: 0x2481918808d1 <JSObject>
              1: encode(aka encode) [0x23ec5e514a11] [/opt/actions-runner/_work/_actions/coverallsapp/github-action/v1.1.2/node_modules/qs/lib/utils.js:~118] [pc=0x193ecd3d5d82](this=0x35d34e4804b1 <undefined>,0x1e5895380119 <Very long string[60387428]>)
              2: stringify(aka stringify) [0x23ec5e5174c9] [/opt/actions-runner/_work/_actions/coverallsapp/github-action/v1.1.2/n...
      
           1: 0xa1a640 node::Abort() [/opt/actions-runner/externals/node12/bin/node]
           2: 0xa1aa4c node::OnFatalError(char const*, char const*) [/opt/actions-runner/externals/node12/bin/node]
           3: 0xb9a62e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/opt/actions-runner/externals/node12/bin/node]
           4: 0xb9a9a9 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/opt/actions-runner/externals/node12/bin/node]
           5: 0xd57c25  [/opt/actions-runner/externals/node12/bin/node]
           6: 0xd582b6 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/opt/actions-runner/externals/node12/bin/node]
           7: 0xd64b75 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/opt/actions-runner/externals/node12/bin/node]
           8: 0xd65a25 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/opt/actions-runner/externals/node12/bin/node]
           9: 0xd670cf v8::internal::Heap::HandleGCRequest() [/opt/actions-runner/externals/node12/bin/node]
          10: 0xd15b35 v8::internal::StackGuard::HandleInterrupts() [/opt/actions-runner/externals/node12/bin/node]
          11: 0x1071176 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [/opt/actions-runner/externals/node12/bin/node]
          12: 0x140dc19  [/opt/actions-runner/externals/node12/bin/node]
      NO_WRAP
      
      I have tried to use the latest version of the action (1.1.3), but I have
      got the same issue.
      
      It looks like it is a `coverallsapp/github-action` issue due to issue
      in JavaScript due to inefficient amount of memory. The corresponding
      bug [1] was filed against the repo.
      
      So I suggest switching to the console utility `coveralls-lcov`. I did
      some internal testing and it works fine.
      
      [1] https://github.com/coverallsapp/github-action/issues/133
      
      Fixes tarantool/tarantool-qa#278
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      
      (cherry picked from commit 761574e3)
      abba4f80
  9. Oct 14, 2022
  10. Oct 13, 2022
  11. Oct 12, 2022
  12. Oct 11, 2022
    • Mergen Imeev's avatar
      sql: change rules used to determine NULLIF() type · 5c6afe47
      Mergen Imeev authored
      This patch introduces new rules to determine type of NULLIF() built-in
      function.
      
      Closes #6990
      
      @TarantoolBot document
      Title: New rules to determine type of result of NULLIF
      
      The type of the result of NULLIF() function now matches the type of the
      first argument.
      
      (cherry picked from commit 805cbaa7)
      5c6afe47
    • Mergen Imeev's avatar
      sql: change rules used to determine CASE type · 5585825a
      Mergen Imeev authored
      This patch introduces new rules to determine type of CASE operation.
      
      Part of #6990
      
      @TarantoolBot document
      Title: New rules to determine type of result of CASE
      
      New rules are applied to determine the type of the CASE operation. If
      all values are NULL with no type, or if a bind variable exists among
      the possible results, then the type of CASE is ANY. Otherwise, all NULL
      values with no type are ignored, and the type of CASE is determined
      using the following rules:
      1) if all values of the same type, then type of CASE is this type;
      2) otherwise, if any of the possible results is of one of the
      incomparable types, then the type of CASE is ANY;
      3) otherwise, if any of the possible results is of one of the
      non-numeric types, then the type of CASE is SCALAR;
      4) otherwise, if any of the possible results is of type NUMBER, then the
      type of CASE is NUMBER;
      5) otherwise, if any of the possible results is of type DECIMAL, then
      the type of CASE is DECIMAL;
      6) otherwise, if any of the possible results is of type DOUBLE, then the
      type of CASE is DOUBLE;
      7) otherwise the type of CASE is INTEGER.
      
      (cherry picked from commit 90f64460)
      5585825a
  13. Oct 07, 2022
  14. Oct 06, 2022
  15. Oct 05, 2022
  16. Sep 30, 2022
    • Nikolay Shirokovskiy's avatar
      test: don't call box.cfg() from test instance in gh-7288 · 13a839e8
      Nikolay Shirokovskiy authored
      Such style is not recommented and going to be banned.
      
      Closes #7715
      
      NO_TEST=test refactoring
      NO_DOC=test refactoring
      NO_CHANGELOG= test refactoring
      
      (cherry picked from commit ce784430)
      13a839e8
    • Georgiy Lebedev's avatar
      test: replace Lua `assert`s with luatest `assert`s in luatest tests · c7a65c94
      Georgiy Lebedev authored
      Some luatest framework tests use Lua `assert`s, which are incomprehensible
      when failed (the only information provided is 'assertion failed!'),
      making debugging difficult: replace them with luatest `assert`s and their
      context-specific varieties.
      
      NO_CHANGELOG=<code health>
      NO_DOC=<code health>
      
      (cherry picked from commit 1d9645f7)
      c7a65c94
    • Vladimir Davydov's avatar
      box: fix usage error messages if FFI is disabled for index read ops · 5ebfc581
      Vladimir Davydov authored
      Commit 7f2c7609 ("box: add option to disable Lua FFI for read
      operations") added an internal configuration option that switches all
      index read operations from FFI to Lua C, which was necessary to
      implement space upgrade in the EE repository. Turns out there was a
      minor bug in that commit - when FFI is disabled, method usage errors
      (raised when object.method is called instead of object:method) stop
      working. Fix this bug and add an extensive test that checks that Lua C
      and FFI implementations of index read operations are equivalent.
      
      Fixes https://github.com/tarantool/tarantool-ee/issues/254
      
      NO_DOC=bug fix
      NO_CHANGELOG=bug manifests itself in only in EE
      
      (cherry picked from commit e8d9a7cb)
      5ebfc581
    • Georgiy Lebedev's avatar
      memtx: fix loss of committed tuple in secondary index · 2ec3dfbb
      Georgiy Lebedev authored
      Concurrent transactions can try to insert tuples that intersect only by
      parts of secondary index: in this case when one of them gets prepared, the
      others get conflicted, but the committed story does not get retained
      (because the conflicting statements are not added to the committed story's
      delete statement list as opposed to primary index) and is lost after
      garbage collection: retain stories if there is a newer uncommitted story
      in the secondary indexes' history chain.
      
      Closes #7712
      
      NO_DOC=bugfix
      
      (cherry picked from commit 7b0baa57)
      2ec3dfbb
    • Kirill Yukhin's avatar
      Generate changelog for 2.10.3 · 8aca8a19
      Kirill Yukhin authored
      Generate changelog for 2.10.3 release.
      Also, clean changelogs/unreleased folder.
      
      NO_DOC=no code changes
      NO_TEST=no code changes
      NO_CHANGELOG=no code changes
Loading