Skip to content

Commit a17fd7d

Browse files
committed
Merge branch 'ps/reftable-sign-compare'
The reftable/ library code has been made -Wsign-compare clean. * ps/reftable-sign-compare: reftable: address trivial -Wsign-compare warnings reftable/blocksource: adjust `read_block()` to return `ssize_t` reftable/blocksource: adjust type of the block length reftable/block: adjust type of the restart length reftable/block: adapt header and footer size to return a `size_t` reftable/basics: adjust `hash_size()` to return `uint32_t` reftable/basics: adjust `common_prefix_size()` to return `size_t` reftable/record: handle overflows when decoding varints reftable/record: drop unused `print` function pointer meson: stop disabling -Wsign-compare
2 parents 73e055d + 33319b0 commit a17fd7d

19 files changed

+157
-151
lines changed

meson.build

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,6 @@ if get_option('warning_level') in ['2','3', 'everything'] and compiler.get_argum
708708
# These are disabled because we have these all over the place.
709709
'-Wno-empty-body',
710710
'-Wno-missing-field-initializers',
711-
'-Wno-sign-compare',
712711
]
713712
if compiler.has_argument(cflag)
714713
libgit_c_args += cflag

reftable/basics.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,18 +263,16 @@ int names_equal(const char **a, const char **b)
263263
return a[i] == b[i];
264264
}
265265

266-
int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
266+
size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
267267
{
268-
int p = 0;
269-
for (; p < a->len && p < b->len; p++) {
268+
size_t p = 0;
269+
for (; p < a->len && p < b->len; p++)
270270
if (a->buf[p] != b->buf[p])
271271
break;
272-
}
273-
274272
return p;
275273
}
276274

277-
int hash_size(enum reftable_hash id)
275+
uint32_t hash_size(enum reftable_hash id)
278276
{
279277
if (!id)
280278
return REFTABLE_HASH_SIZE_SHA1;

reftable/basics.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,9 @@ static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize,
169169
#endif
170170

171171
/* Find the longest shared prefix size of `a` and `b` */
172-
int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
172+
size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
173173

174-
int hash_size(enum reftable_hash id);
174+
uint32_t hash_size(enum reftable_hash id);
175175

176176
/*
177177
* Format IDs that identify the hash function used by a reftable. Note that

reftable/block.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ license that can be found in the LICENSE file or at
1515
#include "system.h"
1616
#include <zlib.h>
1717

18-
int header_size(int version)
18+
size_t header_size(int version)
1919
{
2020
switch (version) {
2121
case 1:
@@ -26,7 +26,7 @@ int header_size(int version)
2626
abort();
2727
}
2828

29-
int footer_size(int version)
29+
size_t footer_size(int version)
3030
{
3131
switch (version) {
3232
case 1:
@@ -40,16 +40,15 @@ int footer_size(int version)
4040
static int block_writer_register_restart(struct block_writer *w, int n,
4141
int is_restart, struct reftable_buf *key)
4242
{
43-
int rlen, err;
43+
uint32_t rlen;
44+
int err;
4445

4546
rlen = w->restart_len;
46-
if (rlen >= MAX_RESTARTS) {
47+
if (rlen >= MAX_RESTARTS)
4748
is_restart = 0;
48-
}
4949

50-
if (is_restart) {
50+
if (is_restart)
5151
rlen++;
52-
}
5352
if (2 + 3 * rlen + n > w->block_size - w->next)
5453
return -1;
5554
if (is_restart) {
@@ -72,7 +71,7 @@ static int block_writer_register_restart(struct block_writer *w, int n,
7271
}
7372

7473
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
75-
uint32_t block_size, uint32_t header_off, int hash_size)
74+
uint32_t block_size, uint32_t header_off, uint32_t hash_size)
7675
{
7776
bw->block = block;
7877
bw->hash_size = hash_size;
@@ -148,8 +147,7 @@ int block_writer_add(struct block_writer *w, struct reftable_record *rec)
148147

149148
int block_writer_finish(struct block_writer *w)
150149
{
151-
int i;
152-
for (i = 0; i < w->restart_len; i++) {
150+
for (uint32_t i = 0; i < w->restart_len; i++) {
153151
put_be24(w->block + w->next, w->restarts[i]);
154152
w->next += 3;
155153
}
@@ -214,7 +212,7 @@ int block_writer_finish(struct block_writer *w)
214212

215213
int block_reader_init(struct block_reader *br, struct reftable_block *block,
216214
uint32_t header_off, uint32_t table_block_size,
217-
int hash_size)
215+
uint32_t hash_size)
218216
{
219217
uint32_t full_block_size = table_block_size;
220218
uint8_t typ = block->data[header_off];

reftable/block.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ struct block_writer {
3030

3131
/* How often to restart keys. */
3232
uint16_t restart_interval;
33-
int hash_size;
33+
uint32_t hash_size;
3434

3535
/* Offset of next uint8_t to write. */
3636
uint32_t next;
@@ -48,7 +48,7 @@ struct block_writer {
4848
* initializes the blockwriter to write `typ` entries, using `block` as temporary
4949
* storage. `block` is not owned by the block_writer. */
5050
int block_writer_init(struct block_writer *bw, uint8_t typ, uint8_t *block,
51-
uint32_t block_size, uint32_t header_off, int hash_size);
51+
uint32_t block_size, uint32_t header_off, uint32_t hash_size);
5252

5353
/* returns the block type (eg. 'r' for ref records. */
5454
uint8_t block_writer_type(struct block_writer *bw);
@@ -72,7 +72,7 @@ struct block_reader {
7272

7373
/* the memory block */
7474
struct reftable_block block;
75-
int hash_size;
75+
uint32_t hash_size;
7676

7777
/* Uncompressed data for log entries. */
7878
z_stream *zstream;
@@ -92,7 +92,7 @@ struct block_reader {
9292
/* initializes a block reader. */
9393
int block_reader_init(struct block_reader *br, struct reftable_block *bl,
9494
uint32_t header_off, uint32_t table_block_size,
95-
int hash_size);
95+
uint32_t hash_size);
9696

9797
void block_reader_release(struct block_reader *br);
9898

@@ -108,7 +108,7 @@ struct block_iter {
108108
uint32_t next_off;
109109
const unsigned char *block;
110110
size_t block_len;
111-
int hash_size;
111+
uint32_t hash_size;
112112

113113
/* key for last entry we read. */
114114
struct reftable_buf last_key;
@@ -137,10 +137,10 @@ void block_iter_reset(struct block_iter *it);
137137
void block_iter_close(struct block_iter *it);
138138

139139
/* size of file header, depending on format version */
140-
int header_size(int version);
140+
size_t header_size(int version);
141141

142142
/* size of file footer, depending on format version */
143-
int footer_size(int version);
143+
size_t footer_size(int version);
144144

145145
/* returns a block to its source. */
146146
void reftable_block_done(struct reftable_block *ret);

reftable/blocksource.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ static void reftable_buf_close(void *b UNUSED)
2424
{
2525
}
2626

27-
static int reftable_buf_read_block(void *v, struct reftable_block *dest,
28-
uint64_t off, uint32_t size)
27+
static ssize_t reftable_buf_read_block(void *v, struct reftable_block *dest,
28+
uint64_t off, uint32_t size)
2929
{
3030
struct reftable_buf *b = v;
3131
assert(off + size <= b->len);
@@ -78,8 +78,8 @@ static void file_close(void *v)
7878
reftable_free(b);
7979
}
8080

81-
static int file_read_block(void *v, struct reftable_block *dest, uint64_t off,
82-
uint32_t size)
81+
static ssize_t file_read_block(void *v, struct reftable_block *dest, uint64_t off,
82+
uint32_t size)
8383
{
8484
struct file_block_source *b = v;
8585
assert(off + size <= b->size);

reftable/reader.c

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ uint64_t block_source_size(struct reftable_block_source *source)
2020
return source->ops->size(source->arg);
2121
}
2222

23-
int block_source_read_block(struct reftable_block_source *source,
24-
struct reftable_block *dest, uint64_t off,
25-
uint32_t size)
23+
ssize_t block_source_read_block(struct reftable_block_source *source,
24+
struct reftable_block *dest, uint64_t off,
25+
uint32_t size)
2626
{
27-
int result = source->ops->read_block(source->arg, dest, off, size);
27+
ssize_t result = source->ops->read_block(source->arg, dest, off, size);
2828
dest->source = *source;
2929
return result;
3030
}
@@ -57,14 +57,17 @@ static int reader_get_block(struct reftable_reader *r,
5757
struct reftable_block *dest, uint64_t off,
5858
uint32_t sz)
5959
{
60+
ssize_t bytes_read;
6061
if (off >= r->size)
6162
return 0;
62-
63-
if (off + sz > r->size) {
63+
if (off + sz > r->size)
6464
sz = r->size - off;
65-
}
6665

67-
return block_source_read_block(&r->source, dest, off, sz);
66+
bytes_read = block_source_read_block(&r->source, dest, off, sz);
67+
if (bytes_read < 0)
68+
return (int)bytes_read;
69+
70+
return 0;
6871
}
6972

7073
enum reftable_hash reftable_reader_hash_id(struct reftable_reader *r)
@@ -601,6 +604,7 @@ int reftable_reader_new(struct reftable_reader **out,
601604
struct reftable_reader *r;
602605
uint64_t file_size = block_source_size(source);
603606
uint32_t read_size;
607+
ssize_t bytes_read;
604608
int err;
605609

606610
REFTABLE_CALLOC_ARRAY(r, 1);
@@ -619,8 +623,8 @@ int reftable_reader_new(struct reftable_reader **out,
619623
goto done;
620624
}
621625

622-
err = block_source_read_block(source, &header, 0, read_size);
623-
if (err != read_size) {
626+
bytes_read = block_source_read_block(source, &header, 0, read_size);
627+
if (bytes_read < 0 || (size_t)bytes_read != read_size) {
624628
err = REFTABLE_IO_ERROR;
625629
goto done;
626630
}
@@ -645,9 +649,9 @@ int reftable_reader_new(struct reftable_reader **out,
645649
r->hash_id = 0;
646650
r->refcount = 1;
647651

648-
err = block_source_read_block(source, &footer, r->size,
649-
footer_size(r->version));
650-
if (err != footer_size(r->version)) {
652+
bytes_read = block_source_read_block(source, &footer, r->size,
653+
footer_size(r->version));
654+
if (bytes_read < 0 || (size_t)bytes_read != footer_size(r->version)) {
651655
err = REFTABLE_IO_ERROR;
652656
goto done;
653657
}
@@ -750,7 +754,7 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
750754
struct table_iter *ti;
751755
struct filtering_ref_iterator *filter = NULL;
752756
struct filtering_ref_iterator empty = FILTERING_REF_ITERATOR_INIT;
753-
int oid_len = hash_size(r->hash_id);
757+
uint32_t oid_len = hash_size(r->hash_id);
754758
int err;
755759

756760
REFTABLE_ALLOC_ARRAY(ti, 1);

reftable/reader.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ license that can be found in the LICENSE file or at
1616

1717
uint64_t block_source_size(struct reftable_block_source *source);
1818

19-
int block_source_read_block(struct reftable_block_source *source,
20-
struct reftable_block *dest, uint64_t off,
21-
uint32_t size);
19+
ssize_t block_source_read_block(struct reftable_block_source *source,
20+
struct reftable_block *dest, uint64_t off,
21+
uint32_t size);
2222
void block_source_close(struct reftable_block_source *source);
2323

2424
/* metadata for a block type */

0 commit comments

Comments
 (0)