Merge branch 'hn/reftable-coverity-fixes'
Problems identified by Coverity in the reftable code have been corrected. * hn/reftable-coverity-fixes: reftable: add print functions to the record types reftable: make reftable_record a tagged union reftable: remove outdated file reftable.c reftable: implement record equality generically reftable: make reftable-record.h function signatures const correct reftable: handle null refnames in reftable_ref_record_equal reftable: drop stray printf in readwrite_test reftable: order unittests by complexity reftable: all xxx_free() functions accept NULL arguments reftable: fix resource warning reftable: ignore remove() return value in stack_test.c reftable: check reftable_stack_auto_compact() return value reftable: fix resource leak blocksource.c reftable: fix resource leak in block.c error path reftable: fix OOB stack write in print functions
This commit is contained in:
@ -288,6 +288,71 @@ static void test_log_write_read(void)
|
||||
reader_close(&rd);
|
||||
}
|
||||
|
||||
static void test_log_zlib_corruption(void)
|
||||
{
|
||||
struct reftable_write_options opts = {
|
||||
.block_size = 256,
|
||||
};
|
||||
struct reftable_iterator it = { 0 };
|
||||
struct reftable_reader rd = { 0 };
|
||||
struct reftable_block_source source = { 0 };
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
struct reftable_writer *w =
|
||||
reftable_new_writer(&strbuf_add_void, &buf, &opts);
|
||||
const struct reftable_stats *stats = NULL;
|
||||
uint8_t hash1[GIT_SHA1_RAWSZ] = { 1 };
|
||||
uint8_t hash2[GIT_SHA1_RAWSZ] = { 2 };
|
||||
char message[100] = { 0 };
|
||||
int err, i, n;
|
||||
|
||||
struct reftable_log_record log = {
|
||||
.refname = "refname",
|
||||
.value_type = REFTABLE_LOG_UPDATE,
|
||||
.value = {
|
||||
.update = {
|
||||
.new_hash = hash1,
|
||||
.old_hash = hash2,
|
||||
.name = "My Name",
|
||||
.email = "myname@invalid",
|
||||
.message = message,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
for (i = 0; i < sizeof(message) - 1; i++)
|
||||
message[i] = (uint8_t)(rand() % 64 + ' ');
|
||||
|
||||
reftable_writer_set_limits(w, 1, 1);
|
||||
|
||||
err = reftable_writer_add_log(w, &log);
|
||||
EXPECT_ERR(err);
|
||||
|
||||
n = reftable_writer_close(w);
|
||||
EXPECT(n == 0);
|
||||
|
||||
stats = writer_stats(w);
|
||||
EXPECT(stats->log_stats.blocks > 0);
|
||||
reftable_writer_free(w);
|
||||
w = NULL;
|
||||
|
||||
/* corrupt the data. */
|
||||
buf.buf[50] ^= 0x99;
|
||||
|
||||
block_source_from_strbuf(&source, &buf);
|
||||
|
||||
err = init_reader(&rd, &source, "file.log");
|
||||
EXPECT_ERR(err);
|
||||
|
||||
err = reftable_reader_seek_log(&rd, &it, "refname");
|
||||
EXPECT(err == REFTABLE_ZLIB_ERROR);
|
||||
|
||||
reftable_iterator_destroy(&it);
|
||||
|
||||
/* cleanup. */
|
||||
strbuf_release(&buf);
|
||||
reader_close(&rd);
|
||||
}
|
||||
|
||||
static void test_table_read_write_sequential(void)
|
||||
{
|
||||
char **names;
|
||||
@ -631,7 +696,6 @@ static void test_write_key_order(void)
|
||||
err = reftable_writer_add_ref(w, &refs[0]);
|
||||
EXPECT_ERR(err);
|
||||
err = reftable_writer_add_ref(w, &refs[1]);
|
||||
printf("%d\n", err);
|
||||
EXPECT(err == REFTABLE_API_ERROR);
|
||||
reftable_writer_close(w);
|
||||
reftable_writer_free(w);
|
||||
@ -667,6 +731,7 @@ static void test_corrupt_table(void)
|
||||
|
||||
int readwrite_test_main(int argc, const char *argv[])
|
||||
{
|
||||
RUN_TEST(test_log_zlib_corruption);
|
||||
RUN_TEST(test_corrupt_table);
|
||||
RUN_TEST(test_corrupt_table_empty);
|
||||
RUN_TEST(test_log_write_read);
|
||||
|
Reference in New Issue
Block a user