]> git.proxmox.com Git - libgit2.git/blobdiff - tests/core/buffer.c
New upstream version 1.1.0+dfsg.1
[libgit2.git] / tests / core / buffer.c
index b8a76b39c9e7ba51ca279e607068c4fbcc08fd65..4e895afd97c12b5e33ffbd07d593ff0bd2fb6c86 100644 (file)
@@ -2,7 +2,7 @@
 #include "buffer.h"
 #include "buf_text.h"
 #include "git2/sys/hashsig.h"
-#include "fileops.h"
+#include "futils.h"
 
 #define TESTSTR "Have you seen that? Have you seeeen that??"
 const char *test_string = TESTSTR;
@@ -231,9 +231,9 @@ check_buf_append(
        git_buf_puts(&tgt, data_b);
        cl_assert(git_buf_oom(&tgt) == 0);
        cl_assert_equal_s(expected_data, git_buf_cstr(&tgt));
-       cl_assert(tgt.size == expected_size);
+       cl_assert_equal_i(tgt.size, expected_size);
        if (expected_asize > 0)
-               cl_assert(tgt.asize == expected_asize);
+               cl_assert_equal_i(tgt.asize, expected_asize);
 
        git_buf_dispose(&tgt);
 }
@@ -308,7 +308,7 @@ void test_core_buffer__5(void)
                                         REP16("x") REP16("o"), 32, 40);
 
        check_buf_append(test_4096, "", test_4096, 4096, 4104);
-       check_buf_append(test_4096, test_4096, test_8192, 8192, 9240);
+       check_buf_append(test_4096, test_4096, test_8192, 8192, 8200);
 
        /* check sequences of appends */
        check_buf_append_abc("a", "b", "c",
@@ -1204,3 +1204,39 @@ void test_core_buffer__dont_grow_borrowed(void)
 
        cl_git_fail_with(GIT_EINVALID, git_buf_grow(&buf, 1024));
 }
+
+void test_core_buffer__dont_hit_infinite_loop_when_resizing(void)
+{
+       git_buf buf = GIT_BUF_INIT;
+
+       cl_git_pass(git_buf_puts(&buf, "foobar"));
+       /*
+        * We do not care whether this succeeds or fails, which
+        * would depend on platform-specific allocation
+        * semantics. We only want to know that the function
+        * actually returns.
+        */
+       (void)git_buf_try_grow(&buf, SIZE_MAX, true);
+
+       git_buf_dispose(&buf);
+}
+
+void test_core_buffer__avoid_printing_into_oom_buffer(void)
+{
+       git_buf buf = GIT_BUF_INIT;
+
+       /* Emulate OOM situation with a previous allocation */
+       buf.asize = 8;
+       buf.ptr = git_buf__oom;
+
+       /*
+        * Print the same string again. As the buffer still has
+        * an `asize` of 8 due to the previous print,
+        * `ENSURE_SIZE` would not try to reallocate the array at
+        * all. As it didn't explicitly check for `git_buf__oom`
+        * in earlier versions, this would've resulted in it
+        * returning successfully and thus `git_buf_puts` would
+        * just print into the `git_buf__oom` array.
+        */
+       cl_git_fail(git_buf_puts(&buf, "foobar"));
+}