Skip to content

Commit ca724d2

Browse files
authored
Allow mongoc_buffer_t larger than INT_MAX (#1467)
1 parent 518ce0f commit ca724d2

File tree

1 file changed

+13
-25
lines changed

1 file changed

+13
-25
lines changed

src/libmongoc/src/mongoc/mongoc-buffer.c

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,15 @@
3131
#endif
3232

3333

34-
#define SPACE_FOR(_b, _sz) \
35-
(((ssize_t) (_b)->datalen - (ssize_t) (_b)->len) >= (ssize_t) (_sz))
34+
static void
35+
make_space_for (mongoc_buffer_t *buffer, size_t data_size)
36+
{
37+
if (buffer->len + data_size > buffer->datalen) {
38+
buffer->datalen = bson_next_power_of_two (buffer->len + data_size);
39+
buffer->data = (uint8_t *) buffer->realloc_func (
40+
buffer->data, buffer->datalen, buffer->realloc_data);
41+
}
42+
}
3643

3744

3845
/**
@@ -135,12 +142,7 @@ _mongoc_buffer_append (mongoc_buffer_t *buffer,
135142

136143
BSON_ASSERT (buffer->datalen);
137144

138-
if (!SPACE_FOR (buffer, data_size)) {
139-
BSON_ASSERT ((buffer->datalen + data_size) < INT_MAX);
140-
buffer->datalen = bson_next_power_of_two (data_size + buffer->len);
141-
buffer->data =
142-
(uint8_t *) buffer->realloc_func (buffer->data, buffer->datalen, NULL);
143-
}
145+
make_space_for (buffer, data_size);
144146

145147
buf = &buffer->data[buffer->len];
146148

@@ -186,12 +188,7 @@ _mongoc_buffer_append_from_stream (mongoc_buffer_t *buffer,
186188

187189
BSON_ASSERT (buffer->datalen);
188190

189-
if (!SPACE_FOR (buffer, size)) {
190-
BSON_ASSERT ((buffer->datalen + size) < INT_MAX);
191-
buffer->datalen = bson_next_power_of_two (size + buffer->len);
192-
buffer->data =
193-
(uint8_t *) buffer->realloc_func (buffer->data, buffer->datalen, NULL);
194-
}
191+
make_space_for (buffer, size);
195192

196193
buf = &buffer->data[buffer->len];
197194

@@ -260,11 +257,7 @@ _mongoc_buffer_fill (mongoc_buffer_t *buffer,
260257

261258
min_bytes -= buffer->len;
262259

263-
if (!SPACE_FOR (buffer, min_bytes)) {
264-
buffer->datalen = bson_next_power_of_two (buffer->len + min_bytes);
265-
buffer->data = (uint8_t *) buffer->realloc_func (
266-
buffer->data, buffer->datalen, buffer->realloc_data);
267-
}
260+
make_space_for (buffer, min_bytes);
268261

269262
avail_bytes = buffer->datalen - buffer->len;
270263

@@ -341,12 +334,7 @@ _mongoc_buffer_try_append_from_stream (mongoc_buffer_t *buffer,
341334

342335
BSON_ASSERT (buffer->datalen);
343336

344-
if (!SPACE_FOR (buffer, size)) {
345-
BSON_ASSERT ((buffer->datalen + size) < INT_MAX);
346-
buffer->datalen = bson_next_power_of_two (size + buffer->len);
347-
buffer->data =
348-
(uint8_t *) buffer->realloc_func (buffer->data, buffer->datalen, NULL);
349-
}
337+
make_space_for (buffer, size);
350338

351339
buf = &buffer->data[buffer->len];
352340

0 commit comments

Comments
 (0)