2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 08:05:21 +00:00

Enable auto-reallocation for all isc_buffer_allocate() buffers

When isc_buffer_t buffer is created with isc_buffer_allocate() assume
that we want it to always auto-reallocate instead of having an extra
call to enable auto-reallocation.
This commit is contained in:
Ondřej Surý
2022-12-15 22:27:12 +01:00
parent 135ec7a0f0
commit 6bd2b34180
6 changed files with 30 additions and 57 deletions

View File

@@ -1548,7 +1548,6 @@ catz_process_apl(dns_catz_zone_t *zone, isc_buffer_t **aclbp,
return (result);
}
isc_buffer_allocate(zone->catzs->mctx, &aclb, 16);
isc_buffer_setautorealloc(aclb, true);
for (result = dns_rdata_apl_first(&rdata_apl); result == ISC_R_SUCCESS;
result = dns_rdata_apl_next(&rdata_apl))
{
@@ -1940,7 +1939,6 @@ dns_catz_generate_zonecfg(dns_catz_zone_t *zone, dns_catz_entry_t *entry,
*/
isc_buffer_allocate(zone->catzs->mctx, &buffer, ISC_BUFFER_INCR);
isc_buffer_setautorealloc(buffer, true);
isc_buffer_putstr(buffer, "zone \"");
dns_name_totext(&entry->name, true, buffer);
isc_buffer_putstr(buffer, "\" { type secondary; primaries");

View File

@@ -36,7 +36,7 @@ isc_buffer_reinit(isc_buffer_t *b, void *base, unsigned int length) {
*/
REQUIRE(b->length <= length);
REQUIRE(base != NULL);
REQUIRE(!b->autore);
REQUIRE(b->mctx == NULL);
if (b->length > 0U) {
(void)memmove(base, b->base, b->length);
@@ -46,13 +46,6 @@ isc_buffer_reinit(isc_buffer_t *b, void *base, unsigned int length) {
b->length = length;
}
void
isc_buffer_setautorealloc(isc_buffer_t *b, bool enable) {
REQUIRE(ISC_BUFFER_VALID(b));
REQUIRE(b->mctx != NULL);
b->autore = enable;
}
void
isc_buffer_compact(isc_buffer_t *b) {
unsigned int length;
@@ -107,7 +100,7 @@ isc_buffer_copyregion(isc_buffer_t *b, const isc_region_t *r) {
REQUIRE(ISC_BUFFER_VALID(b));
REQUIRE(r != NULL);
if (b->autore) {
if (b->mctx) {
result = isc_buffer_reserve(b, r->length);
if (result != ISC_R_SUCCESS) {
return (result);
@@ -136,8 +129,6 @@ isc_buffer_allocate(isc_mem_t *mctx, isc_buffer_t **dynbuffer,
isc_buffer_init(dbuf, bdata, length);
ENSURE(ISC_BUFFER_VALID(dbuf));
dbuf->mctx = mctx;
*dynbuffer = dbuf;
@@ -213,7 +204,7 @@ isc_buffer_printf(isc_buffer_t *b, const char *format, ...) {
return (ISC_R_FAILURE);
}
if (b->autore) {
if (b->mctx) {
result = isc_buffer_reserve(b, n + 1);
if (result != ISC_R_SUCCESS) {
return (result);

View File

@@ -562,7 +562,6 @@ isc__httpd_sendreq_new(isc_httpd_t *httpd) {
*/
isc_buffer_allocate(req->mctx, &req->sendbuffer, HTTP_SENDLEN);
isc_buffer_clear(req->sendbuffer);
isc_buffer_setautorealloc(req->sendbuffer, true);
isc_buffer_initnull(&req->bodybuffer);

View File

@@ -182,8 +182,6 @@ struct isc_buffer {
ISC_LINK(isc_buffer_t) link;
/*! private internal elements */
isc_mem_t *mctx;
/* automatically realloc buffer at put* */
bool autore;
};
/***
@@ -253,16 +251,6 @@ isc_buffer_reinit(isc_buffer_t *b, void *base, unsigned int length);
*
*/
void
isc_buffer_setautorealloc(isc_buffer_t *b, bool enable);
/*!<
* \brief Enable or disable autoreallocation on 'b'.
*
* Requires:
*\li 'b' is a valid dynamic buffer (b->mctx != NULL).
*
*/
void
isc_buffer_compact(isc_buffer_t *b);
/*!<
@@ -854,7 +842,7 @@ isc_buffer_getuint8(isc_buffer_t *b) {
{ \
REQUIRE(ISC_BUFFER_VALID(b)); \
\
if (b->autore) { \
if (b->mctx) { \
isc_result_t result = isc_buffer_reserve(b, \
sizeof(val)); \
ENSURE(result == ISC_R_SUCCESS); \
@@ -969,7 +957,7 @@ isc_buffer_putmem(isc_buffer_t *b, const unsigned char *base,
unsigned int length) {
ISC_REQUIRE(ISC_BUFFER_VALID(b));
if (b->autore) {
if (b->mctx) {
isc_result_t result = isc_buffer_reserve(b, length);
ISC_REQUIRE(result == ISC_R_SUCCESS);
}
@@ -1005,7 +993,7 @@ isc_buffer_putstr(isc_buffer_t *b, const char *source) {
ISC_REQUIRE(source != NULL);
length = (unsigned int)strlen(source);
if (b->autore) {
if (b->mctx) {
isc_result_t result = isc_buffer_reserve(b, length);
ISC_ENSURE(result == ISC_R_SUCCESS);
}

View File

@@ -443,7 +443,6 @@ new_http_cstream(isc_nmsocket_t *sock, http_cstream_t **streamp) {
isc_buffer_allocate(mctx, &stream->rbuf,
INITIAL_DNS_MESSAGE_BUFFER_SIZE);
isc_buffer_setautorealloc(stream->rbuf, true);
ISC_LIST_PREPEND(sock->h2.session->cstreams, stream, link);
*streamp = stream;
@@ -1005,7 +1004,6 @@ http_readcb(isc_nmhandle_t *handle, isc_result_t result, isc_region_t *region,
if (session->buf == NULL) {
isc_buffer_allocate(session->mctx, &session->buf,
unread_size);
isc_buffer_setautorealloc(session->buf, true);
}
isc_buffer_putmem(session->buf, region->base + readlen,
unread_size);
@@ -1121,8 +1119,6 @@ http_send_outgoing(isc_nm_http_session_t *session, isc_nmhandle_t *httphandle,
isc_buffer_allocate(session->mctx,
&session->pending_write_data,
INITIAL_DNS_MESSAGE_BUFFER_SIZE);
isc_buffer_setautorealloc(session->pending_write_data,
true);
}
isc_buffer_putmem(session->pending_write_data, data, pending);
total = new_total;
@@ -1267,13 +1263,15 @@ http_do_bio(isc_nm_http_session_t *session, isc_nmhandle_t *send_httphandle,
if (nghttp2_session_want_read(session->ngsession) != 0) {
if (!session->reading) {
/* We have not yet started reading from this handle */
/* We have not yet started
* reading from this handle */
isc_nm_read(session->handle, http_readcb, session);
session->reading = true;
} else if (session->buf != NULL) {
size_t remaining =
isc_buffer_remaininglength(session->buf);
/* Leftover data in the buffer, use it */
/* Leftover data in the
* buffer, use it */
size_t readlen = nghttp2_session_mem_recv(
session->ngsession,
isc_buffer_current(session->buf), remaining);
@@ -1288,7 +1286,9 @@ http_do_bio(isc_nm_http_session_t *session, isc_nmhandle_t *send_httphandle,
send_cbarg);
return;
} else {
/* Resume reading, it's idempotent, wait for more */
/* Resume reading, it's
* idempotent, wait for more
*/
isc_nm_read(session->handle, http_readcb, session);
}
} else {
@@ -1406,9 +1406,10 @@ transport_connect_cb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
NGHTTP2_PROTO_VERSION_ID_LEN) != 0)
{
/*
* HTTP/2 negotiation error. Any sensible DoH
* client will fail if HTTP/2 cannot be
* negotiated via ALPN.
* HTTP/2 negotiation error.
* Any sensible DoH client
* will fail if HTTP/2 cannot
* be negotiated via ALPN.
*/
result = ISC_R_HTTP2ALPNERROR;
goto error;
@@ -2346,9 +2347,12 @@ server_on_frame_recv_callback(nghttp2_session *ngsession,
ngsession, frame->hd.stream_id);
/*
* For DATA and HEADERS frame, this callback may be
* called after on_stream_close_callback. Check that
* the stream is still alive.
* For DATA and HEADERS frame,
* this callback may be called
* after
* on_stream_close_callback.
* Check that the stream is
* still alive.
*/
if (socket == NULL) {
return (0);
@@ -3168,9 +3172,12 @@ isc__nm_base64_to_base64url(isc_mem_t *mem, const char *base64,
break;
default:
/*
* All other characters from the alphabet are the same
* for both base64 and base64url, so we can reuse the
* validation table for the rest of the characters.
* All other characters from
* the alphabet are the same
* for both base64 and
* base64url, so we can reuse
* the validation table for
* the rest of the characters.
*/
if (base64[i] != '-' && base64[i] != '_' &&
base64url_validation_table[(size_t)base64[i]])

View File

@@ -113,8 +113,6 @@ ISC_RUN_TEST_IMPL(isc_buffer_dynamic) {
assert_non_null(b);
assert_int_equal(b->length, last_length);
isc_buffer_setautorealloc(b, true);
isc_buffer_putuint8(b, 1);
for (i = 0; i < 1000; i++) {
@@ -166,16 +164,9 @@ ISC_RUN_TEST_IMPL(isc_buffer_copyregion) {
assert_int_equal(result, ISC_R_SUCCESS);
/*
* Appending more data to the buffer should fail.
* Appending should succeed.
*/
result = isc_buffer_copyregion(b, &r);
assert_int_equal(result, ISC_R_NOSPACE);
/*
* Enable auto reallocation and retry. Appending should now succeed.
*/
isc_buffer_setautorealloc(b, true);
result = isc_buffer_copyregion(b, &r);
assert_int_equal(result, ISC_R_SUCCESS);
isc_buffer_free(&b);
@@ -196,7 +187,6 @@ ISC_RUN_TEST_IMPL(isc_buffer_printf) {
*/
b = NULL;
isc_buffer_allocate(mctx, &b, 0);
isc_buffer_setautorealloc(b, true);
/*
* Sanity check.