diff --git a/src/box/box.cc b/src/box/box.cc
index 6fc73fd4b6b70a84d5e4318d68b53976385b6372..34c22b4ef4b4526118d1ce9dd52c76420b16d90d 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -994,9 +994,6 @@ engine_init()
 static inline void
 box_init(void)
 {
-	error_init();
-
-
 	tuple_init(cfg_getd("slab_alloc_arena"),
 		   cfg_geti("slab_alloc_minimal"),
 		   cfg_geti("slab_alloc_maximal"),
diff --git a/src/box/error.cc b/src/box/error.cc
index 96822785e899130e434026775ea3adb2bcb30195..d7e2721a379941cae9a7a66346e74dc02690ca3b 100644
--- a/src/box/error.cc
+++ b/src/box/error.cc
@@ -156,7 +156,7 @@ ErrorInjection::ErrorInjection(const char *file, unsigned line, const char *msg)
 }
 
 void
-error_init(void)
+box_error_init(void)
 {
 	error_factory->ClientError = BuildClientError;
 }
diff --git a/src/box/error.h b/src/box/error.h
index 82ac87211e3699b724101e8a02f7fc8b036e5d42..019b0d3d03c4a8d5982a5837d12c6a777791298a 100644
--- a/src/box/error.h
+++ b/src/box/error.h
@@ -182,7 +182,7 @@ class ErrorInjection: public LoggedError {
 };
 
 void
-error_init(void);
+box_error_init(void);
 
 #endif /* defined(__cplusplus) */
 
diff --git a/src/main.cc b/src/main.cc
index b6a9dbce62d7d8184f33283b3dd9089292e20695..d59caae35dd4eb62ae5f3dfb2475e9793a1e9ba5 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -61,6 +61,7 @@
 #include "tt_pthread.h"
 #include "lua/init.h"
 #include "box/box.h"
+#include "box/error.h"
 #include "scoped_guard.h"
 #include "random.h"
 #include "tt_uuid.h"
@@ -624,6 +625,7 @@ main(int argc, char **argv)
 	main_argv = argv;
 
 	exception_init();
+	box_error_init();
 
 	fiber_init(fiber_cxx_invoke);
 	/* Init iobuf library with default readahead */
diff --git a/test/box-tap/net.box.result b/test/box-tap/net.box.result
index 4eb7be3f9c89a8872753ce8dfe6dc90e7fa89d17..589113c3e8eb68592d2ca0390482975d0e5efe18 100644
--- a/test/box-tap/net.box.result
+++ b/test/box-tap/net.box.result
@@ -1,6 +1,7 @@
 TAP version 13
-1..4
+1..5
 ok - instance created
 ok - instance started
 ok - connected to instance
 ok - space exists
+ok - error handling
diff --git a/test/box-tap/net.box.test.lua b/test/box-tap/net.box.test.lua
index 2bcafd40080fd452c05cc41ba29d1ad8a4a115ff..0c7fa3b121d897b382b5f1af7c22a1c02c9497f8 100755
--- a/test/box-tap/net.box.test.lua
+++ b/test/box-tap/net.box.test.lua
@@ -7,7 +7,7 @@ local net_box = require('net.box')
 local test_run = require('test_run')
 local inspector = test_run.new()
 
-test:plan(4)
+test:plan(5)
 
 -- create tarantool instance
 test:is(
@@ -24,6 +24,8 @@ local uri = inspector:eval('second', 'box.cfg.listen')[1]
 local conn = net_box:new(uri)
 test:is(conn:is_connected(), true, 'connected to instance')
 test:is(conn.space ~= nil, true, 'space exists')
+-- gh-1814: Segfault if using `net.box` before `box.cfg` start
+test:ok(not pcall(function() conn.space._vspace:insert() end), "error handling")
 
 -- cleanup
 conn:close()