* [tarantool-patches] [PATCH] box: fix bug with module_reload() without box.cfg{} @ 2019-02-05 0:17 Roman Khabibov 2019-02-05 15:41 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-15 14:58 ` Kirill Yukhin 0 siblings, 2 replies; 5+ messages in thread From: Roman Khabibov @ 2019-02-05 0:17 UTC (permalink / raw) To: tarantool-patches; +Cc: v.shpilevoy Fix bug with segfault when use module_reload() before box.cfg{}. Closes #3770 Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3770-module-reload Issue: https://github.com/tarantool/tarantool/issues/3770 --- src/box/func.c | 3 +++ test/box/func_reload.result | 9 +++++++++ test/box/func_reload.test.lua | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/src/box/func.c b/src/box/func.c index a817851fd..ee6dd55dc 100644 --- a/src/box/func.c +++ b/src/box/func.c @@ -301,6 +301,9 @@ module_sym(struct module *module, const char *name) int module_reload(const char *package, const char *package_end, struct module **module) { + if (!modules) + return -1; + struct module *old_module = module_cache_find(package, package_end); if (old_module == NULL) { /* Module wasn't loaded - do nothing. */ diff --git a/test/box/func_reload.result b/test/box/func_reload.result index b024cd143..e35ca41e2 100644 --- a/test/box/func_reload.result +++ b/test/box/func_reload.result @@ -1,3 +1,12 @@ +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. +box.internal.module_reload('') +--- +- error: Module '' does not exist +... +box.internal.module_reload('xxx') +--- +- error: Module 'xxx' does not exist +... fio = require('fio') --- ... diff --git a/test/box/func_reload.test.lua b/test/box/func_reload.test.lua index 8906898ec..00fe8cf48 100644 --- a/test/box/func_reload.test.lua +++ b/test/box/func_reload.test.lua @@ -1,3 +1,8 @@ +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. + +box.internal.module_reload('') +box.internal.module_reload('xxx') + fio = require('fio') net = require('net.box') fiber = require('fiber') -- 2.17.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tarantool-patches] Re: [PATCH] box: fix bug with module_reload() without box.cfg{} 2019-02-05 0:17 [tarantool-patches] [PATCH] box: fix bug with module_reload() without box.cfg{} Roman Khabibov @ 2019-02-05 15:41 ` Vladislav Shpilevoy 2019-02-07 11:31 ` Roman 2019-02-15 14:58 ` Kirill Yukhin 1 sibling, 1 reply; 5+ messages in thread From: Vladislav Shpilevoy @ 2019-02-05 15:41 UTC (permalink / raw) To: tarantool-patches, Roman Khabibov Hi! Thanks for the patch! See 5 comments below. On 05/02/2019 01:17, Roman Khabibov wrote: > Fix bug with segfault when use module_reload() before box.cfg{}. 1. Instead of duplicating commit title, it is usually better to describe here a reason why the bug existed. > > Closes #3770 > > Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3770-module-reload > Issue: https://github.com/tarantool/tarantool/issues/3770 2. Please, put branch and issue links after '---'. > --- Here. > src/box/func.c | 3 +++ > test/box/func_reload.result | 9 +++++++++ > test/box/func_reload.test.lua | 5 +++++ > 3 files changed, 17 insertions(+) > > diff --git a/src/box/func.c b/src/box/func.c > index a817851fd..ee6dd55dc 100644 > --- a/src/box/func.c > +++ b/src/box/func.c > @@ -301,6 +301,9 @@ module_sym(struct module *module, const char *name) > int > module_reload(const char *package, const char *package_end, struct module **module) > { > + if (!modules) > + return -1; 3. As you know, we use == NULL instead of ! when dealing with pointers. 4. Instead of checking for modules != NULL in each public func.h function, it is better to move module_init() call from box_cfg_xc() to box_init(). Then main() will create modules hash. > + > struct module *old_module = module_cache_find(package, package_end); > if (old_module == NULL) { > /* Module wasn't loaded - do nothing. */ > diff --git a/test/box/func_reload.test.lua b/test/box/func_reload.test.lua > index 8906898ec..00fe8cf48 100644 > --- a/test/box/func_reload.test.lua > +++ b/test/box/func_reload.test.lua > @@ -1,3 +1,8 @@ > +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. > + > +box.internal.module_reload('') > +box.internal.module_reload('xxx') 5. Not-tap tests are always run with already called box.cfg(), so these lines here will work regardless of your patch. Please, move it to a tap test, in app-tap directory. Now I do not see there any existing and suitable file for this test, so you should create a new one. For example, app-tap/func.test.lua. > + > fio = require('fio') > net = require('net.box') > fiber = require('fiber') > -- > 2.17.1 > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tarantool-patches] Re: [PATCH] box: fix bug with module_reload() without box.cfg{} 2019-02-05 15:41 ` [tarantool-patches] " Vladislav Shpilevoy @ 2019-02-07 11:31 ` Roman 2019-02-15 13:28 ` Vladislav Shpilevoy 0 siblings, 1 reply; 5+ messages in thread From: Roman @ 2019-02-07 11:31 UTC (permalink / raw) To: tarantool-patches; +Cc: Vladislav Shpilevoy [-- Attachment #1: Type: text/plain, Size: 3341 bytes --] Hi! Thanks for review. On Вт, фев 5, 2019 at 6:42 PM, Vladislav Shpilevoy <v.shpilevoy@tarantool.org> wrote: > Hi! Thanks for the patch! See 5 comments below. > 1. Instead of duplicating commit title, it is usually > better to describe here a reason why the bug existed. Done. > > 2. Please, put branch and issue links after '---'. > >> --- Sorry. > 4. Instead of checking for modules != NULL in each public func.h > function, > it is better to move module_init() call from box_cfg_xc() to > box_init(). Then > main() will create modules hash. diff --git a/src/box/box.cc b/src/box/box.cc index 8892d0f0e..6494a0f44 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -2053,6 +2053,9 @@ box_init(void) */ session_init(); + if (module_init() != 0) + diag_raise(); + if (tuple_init(lua_hash) != 0) diag_raise(); @@ -2080,8 +2083,6 @@ box_cfg_xc(void) gc_init(); engine_init(); - if (module_init() != 0) - diag_raise(); schema_init(); replication_init(); port_init(); > 5. Not-tap tests are always run with already called box.cfg(), > so these lines here will work regardless of your patch. Please, > move it to a tap test, in app-tap directory. Now I do not see > there any existing and suitable file for this test, so you > should create a new one. For example, app-tap/func.test.lua. diff --git a/test/app-tap/func.test.lua b/test/app-tap/func.test.lua new file mode 100755 index 000000000..11bc01f1d --- /dev/null +++ b/test/app-tap/func.test.lua @@ -0,0 +1,14 @@ +#!/usr/bin/env tarantool + +local tap = require('tap') + +local test = tap.test("func") + +test:plan(2) + +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. + +test:ok(not pcall(box.internal.module_reload, ''), + 'expected error: no module') +test:ok(not pcall(box.internal.module_reload, 'xxx'), + 'expected error: no module') commit afd765d8bc86188c33cba3f06478853ec76bcaea Author: Roman Khabibov <roman.habibov@tarantool.org> Date: Tue Feb 5 03:04:33 2019 +0300 box: fix bug with module_reload() without box.cfg{} A bug existed because module_init was called during a call to box_cfg{}. Modules were not initialized before calling box.cfg{}. Closes #3770 diff --git a/src/box/box.cc b/src/box/box.cc index 8892d0f0e..6494a0f44 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -2053,6 +2053,9 @@ box_init(void) */ session_init(); + if (module_init() != 0) + diag_raise(); + if (tuple_init(lua_hash) != 0) diag_raise(); @@ -2080,8 +2083,6 @@ box_cfg_xc(void) gc_init(); engine_init(); - if (module_init() != 0) - diag_raise(); schema_init(); replication_init(); port_init(); diff --git a/test/app-tap/func.test.lua b/test/app-tap/func.test.lua new file mode 100755 index 000000000..11bc01f1d --- /dev/null +++ b/test/app-tap/func.test.lua @@ -0,0 +1,14 @@ +#!/usr/bin/env tarantool + +local tap = require('tap') + +local test = tap.test("func") + +test:plan(2) + +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. + +test:ok(not pcall(box.internal.module_reload, ''), + 'expected error: no module') +test:ok(not pcall(box.internal.module_reload, 'xxx'), + 'expected error: no module') [-- Attachment #2: Type: text/html, Size: 4424 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tarantool-patches] Re: [PATCH] box: fix bug with module_reload() without box.cfg{} 2019-02-07 11:31 ` Roman @ 2019-02-15 13:28 ` Vladislav Shpilevoy 0 siblings, 0 replies; 5+ messages in thread From: Vladislav Shpilevoy @ 2019-02-15 13:28 UTC (permalink / raw) To: Roman, tarantool-patches, Kirill Yukhin LGTM. On 07/02/2019 12:31, Roman wrote: > Hi! Thanks for review. > > On Вт, фев 5, 2019 at 6:42 PM, Vladislav Shpilevoy <v.shpilevoy@tarantool.org> wrote: >> Hi! Thanks for the patch! See 5 comments below. > >> 1. Instead of duplicating commit title, it is usually better to describe here a reason why the bug existed. > Done. > >> 2. Please, put branch and issue links after '---'. >> >> --- > Sorry. > >> 4. Instead of checking for modules != NULL in each public func.h function, it is better to move module_init() call from box_cfg_xc() to box_init(). Then main() will create modules hash. > diff --git a/src/box/box.cc b/src/box/box.cc index 8892d0f0e..6494a0f44 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -2053,6 +2053,9 @@ box_init(void) */ session_init(); + if (module_init() != 0) + diag_raise(); + if (tuple_init(lua_hash) != 0) diag_raise(); @@ -2080,8 +2083,6 @@ box_cfg_xc(void) gc_init(); engine_init(); - if (module_init() != 0) - diag_raise(); schema_init(); replication_init(); port_init(); > >> 5. Not-tap tests are always run with already called box.cfg(), so these lines here will work regardless of your patch. Please, move it to a tap test, in app-tap directory. Now I do not see there any existing and suitable file for this test, so you should create a new one. For example, app-tap/func.test.lua. > diff --git a/test/app-tap/func.test.lua b/test/app-tap/func.test.lua new file mode 100755 index 000000000..11bc01f1d --- /dev/null +++ b/test/app-tap/func.test.lua @@ -0,0 +1,14 @@ +#!/usr/bin/env tarantool + +local tap = require('tap') + +local test = tap.test("func") + +test:plan(2) + +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. + +test:ok(not pcall(box.internal.module_reload, ''), + 'expected error: no module') +test:ok(not pcall(box.internal.module_reload, 'xxx'), + 'expected error: no module') > > > commit afd765d8bc86188c33cba3f06478853ec76bcaea Author: Roman Khabibov <roman.habibov@tarantool.org> Date: Tue Feb 5 03:04:33 2019 +0300 box: fix bug with module_reload() without box.cfg{} A bug existed because module_init was called during a call to box_cfg{}. Modules were not initialized before calling box.cfg{}. Closes #3770 diff --git a/src/box/box.cc b/src/box/box.cc index 8892d0f0e..6494a0f44 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -2053,6 +2053,9 @@ box_init(void) */ session_init(); + if (module_init() != 0) + diag_raise(); + if (tuple_init(lua_hash) != 0) diag_raise(); @@ -2080,8 +2083,6 @@ box_cfg_xc(void) gc_init(); engine_init(); - if (module_init() != 0) - diag_raise(); schema_init(); replication_init(); port_init(); diff --git a/test/app-tap/func.test.lua b/test/app-tap/func.test.lua new file mode 100755 index 000000000..11bc01f1d --- /dev/null +++ b/test/app-tap/func.test.lua @@ -0,0 +1,14 @@ +#!/usr/bin/env tarantool + +local tap = require('tap') + > +local test = tap.test("func") + +test:plan(2) + +-- gh-3770 Check no segfault with module_reload() without box.cfg{}. + +test:ok(not pcall(box.internal.module_reload, ''), + 'expected error: no module') +test:ok(not pcall(box.internal.module_reload, 'xxx'), + 'expected error: no module') > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tarantool-patches] Re: [PATCH] box: fix bug with module_reload() without box.cfg{} 2019-02-05 0:17 [tarantool-patches] [PATCH] box: fix bug with module_reload() without box.cfg{} Roman Khabibov 2019-02-05 15:41 ` [tarantool-patches] " Vladislav Shpilevoy @ 2019-02-15 14:58 ` Kirill Yukhin 1 sibling, 0 replies; 5+ messages in thread From: Kirill Yukhin @ 2019-02-15 14:58 UTC (permalink / raw) To: tarantool-patches; +Cc: v.shpilevoy Hello, On 05 Feb 03:17, Roman Khabibov wrote: > Fix bug with segfault when use module_reload() before box.cfg{}. > > Closes #3770 > > Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3770-module-reload > Issue: https://github.com/tarantool/tarantool/issues/3770 I've checked your patch into 2.1 branch. -- Regards, Kirill Yukhin ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-02-15 14:58 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-02-05 0:17 [tarantool-patches] [PATCH] box: fix bug with module_reload() without box.cfg{} Roman Khabibov 2019-02-05 15:41 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-07 11:31 ` Roman 2019-02-15 13:28 ` Vladislav Shpilevoy 2019-02-15 14:58 ` Kirill Yukhin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox