Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-08-04 00:50:27 +0300
committerEdward Thomson <ethomson@edwardthomson.com>2015-08-04 02:44:51 +0300
commitef4857c2b3d4a61fd1d840199afc92eaf2e15345 (patch)
tree2e02b7fcc28a00c0eede602b8880b83a9fd35c77 /tests
parent854b701c8a799a484ef48d8b595601ab29876b57 (diff)
errors: tighten up git_error_state OOMs a bit more
When an error state is an OOM, make sure that we treat is specially and do not try to free it.
Diffstat (limited to 'tests')
-rw-r--r--tests/core/errors.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/tests/core/errors.c b/tests/core/errors.c
index 25bbbd5f6..ab18951a6 100644
--- a/tests/core/errors.c
+++ b/tests/core/errors.c
@@ -93,23 +93,44 @@ void test_core_errors__restore(void)
giterr_clear();
cl_assert(giterr_last() == NULL);
- cl_assert_equal_i(0, giterr_capture(&err_state, 0));
+ cl_assert_equal_i(0, giterr_state_capture(&err_state, 0));
memset(&err_state, 0x0, sizeof(git_error_state));
giterr_set(42, "Foo: %s", "bar");
- cl_assert_equal_i(-1, giterr_capture(&err_state, -1));
+ cl_assert_equal_i(-1, giterr_state_capture(&err_state, -1));
cl_assert(giterr_last() == NULL);
giterr_set(99, "Bar: %s", "foo");
- giterr_restore(&err_state);
+ giterr_state_restore(&err_state);
cl_assert_equal_i(42, giterr_last()->klass);
cl_assert_equal_s("Foo: bar", giterr_last()->message);
}
+void test_core_errors__free_state(void)
+{
+ git_error_state err_state = {0};
+
+ giterr_clear();
+
+ giterr_set(42, "Foo: %s", "bar");
+ cl_assert_equal_i(-1, giterr_state_capture(&err_state, -1));
+
+ giterr_set(99, "Bar: %s", "foo");
+
+ giterr_state_free(&err_state);
+
+ cl_assert_equal_i(99, giterr_last()->klass);
+ cl_assert_equal_s("Bar: foo", giterr_last()->message);
+
+ giterr_state_restore(&err_state);
+
+ cl_assert(giterr_last() == NULL);
+}
+
void test_core_errors__restore_oom(void)
{
git_error_state err_state = {0};
@@ -121,11 +142,13 @@ void test_core_errors__restore_oom(void)
oom_error = giterr_last();
cl_assert(oom_error);
- cl_assert_equal_i(-1, giterr_capture(&err_state, -1));
+ cl_assert_equal_i(-1, giterr_state_capture(&err_state, -1));
cl_assert(giterr_last() == NULL);
+ cl_assert_equal_i(GITERR_NOMEMORY, err_state.error_msg.klass);
+ cl_assert_equal_s("Out of memory", err_state.error_msg.message);
- giterr_restore(&err_state);
+ giterr_state_restore(&err_state);
cl_assert(giterr_last()->klass == GITERR_NOMEMORY);
cl_assert_(giterr_last() == oom_error, "static oom error not restored");