aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-contrib <robot-contrib@yandex-team.com>2024-08-28 12:10:45 +0300
committerrobot-contrib <robot-contrib@yandex-team.com>2024-08-28 12:24:00 +0300
commit4047efcfd40dcd860e9030a4c40a495aae320d7c (patch)
tree62d3b7617e288540e583ae87ff52aed3679338d9
parent1f35e9c580f0bbe2c2018259a0f54fb6496b5fa6 (diff)
downloadydb-4047efcfd40dcd860e9030a4c40a495aae320d7c.tar.gz
Update contrib/libs/c-ares to 1.33.1
989fe7a8375f82c54730928e4590985850c9a72a
-rw-r--r--contrib/libs/c-ares/RELEASE-NOTES.md32
-rw-r--r--contrib/libs/c-ares/include/ares_version.h4
-rw-r--r--contrib/libs/c-ares/src/lib/ares__close_sockets.c2
-rw-r--r--contrib/libs/c-ares/src/lib/ares__socket.c2
-rw-r--r--contrib/libs/c-ares/src/lib/ares_android.c3
-rw-r--r--contrib/libs/c-ares/src/lib/ares_cookie.c3
-rw-r--r--contrib/libs/c-ares/src/lib/ares_getaddrinfo.c7
-rw-r--r--contrib/libs/c-ares/src/lib/ares_metrics.c2
-rw-r--r--contrib/libs/c-ares/src/lib/ares_private.h12
-rw-r--r--contrib/libs/c-ares/src/lib/ares_process.c21
-rw-r--r--contrib/libs/c-ares/src/lib/ares_qcache.c12
-rw-r--r--contrib/libs/c-ares/src/lib/ares_search.c72
-rw-r--r--contrib/libs/c-ares/src/lib/ares_send.c6
-rw-r--r--contrib/libs/c-ares/src/lib/ares_sysconfig.c3
-rw-r--r--contrib/libs/c-ares/src/lib/dsa/ares__htable.c2
-rw-r--r--contrib/libs/c-ares/src/lib/event/ares_event_configchg.c5
-rw-r--r--contrib/libs/c-ares/src/lib/str/ares__buf.c6
-rw-r--r--contrib/libs/c-ares/ya.make4
18 files changed, 142 insertions, 56 deletions
diff --git a/contrib/libs/c-ares/RELEASE-NOTES.md b/contrib/libs/c-ares/RELEASE-NOTES.md
index b072feb29f..e9c04953dc 100644
--- a/contrib/libs/c-ares/RELEASE-NOTES.md
+++ b/contrib/libs/c-ares/RELEASE-NOTES.md
@@ -1,3 +1,35 @@
+## c-ares version 1.33.1 - August 23 2024
+
+This is a bugfix release.
+
+Bugfixes:
+* Work around systemd-resolved quirk that returns unexpected codes for single
+ label names. Also adds test cases to validate the work around works and
+ will continue to work in future releases.
+ [PR #863](https://github.com/c-ares/c-ares/pull/863),
+ See Also https://github.com/systemd/systemd/issues/34101
+* Fix sysconfig ndots default value, also adds containerized test case to
+ prevent future regressions.
+ [PR #862](https://github.com/c-ares/c-ares/pull/862)
+* Fix blank DNS name returning error code rather than valid record for
+ commands like: `adig -t SOA .`. Also adds test case to prevent future
+ regressions.
+ [9e574af](https://github.com/c-ares/c-ares/commit/9e574af)
+* Fix calculation of query times > 1s.
+ [2b2eae7](https://github.com/c-ares/c-ares/commit/2b2eae7)
+* Fix building on old Linux releases that don't have `TCP_FASTOPEN_CONNECT`.
+ [b7a89b9](https://github.com/c-ares/c-ares/commit/b7a89b9)
+* Fix minor Android build warnings.
+ [PR #848](https://github.com/c-ares/c-ares/pull/848)
+
+Thanks go to these friendly people for their efforts and contributions for this
+release:
+* Brad House (@bradh352)
+* Erik Lax (@eriklax)
+* Hans-Christian Egtvedt (@egtvedt)
+* Mikael Lindemann (@mikaellindemann)
+* Nodar Chkuaselidze (@nodech)
+
## c-ares version 1.33.0 - August 2 2024
This is a feature and bugfix release.
diff --git a/contrib/libs/c-ares/include/ares_version.h b/contrib/libs/c-ares/include/ares_version.h
index fef66b7397..c910d79209 100644
--- a/contrib/libs/c-ares/include/ares_version.h
+++ b/contrib/libs/c-ares/include/ares_version.h
@@ -32,11 +32,11 @@
#define ARES_VERSION_MAJOR 1
#define ARES_VERSION_MINOR 33
-#define ARES_VERSION_PATCH 0
+#define ARES_VERSION_PATCH 1
#define ARES_VERSION \
((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \
(ARES_VERSION_PATCH))
-#define ARES_VERSION_STR "1.33.0"
+#define ARES_VERSION_STR "1.33.1"
#define CARES_HAVE_ARES_LIBRARY_INIT 1
#define CARES_HAVE_ARES_LIBRARY_CLEANUP 1
diff --git a/contrib/libs/c-ares/src/lib/ares__close_sockets.c b/contrib/libs/c-ares/src/lib/ares__close_sockets.c
index 27bbaacf0e..71c7e64f08 100644
--- a/contrib/libs/c-ares/src/lib/ares__close_sockets.c
+++ b/contrib/libs/c-ares/src/lib/ares__close_sockets.c
@@ -37,7 +37,7 @@ static void ares__requeue_queries(ares_conn_t *conn,
ares__tvnow(&now);
while ((query = ares__llist_first_val(conn->queries_to_conn)) != NULL) {
- ares__requeue_query(query, &now, requeue_status, ARES_TRUE);
+ ares__requeue_query(query, &now, requeue_status, ARES_TRUE, NULL);
}
}
diff --git a/contrib/libs/c-ares/src/lib/ares__socket.c b/contrib/libs/c-ares/src/lib/ares__socket.c
index 345ab95ba1..70ed7a8dd3 100644
--- a/contrib/libs/c-ares/src/lib/ares__socket.c
+++ b/contrib/libs/c-ares/src/lib/ares__socket.c
@@ -56,7 +56,7 @@
#include <fcntl.h>
#include <limits.h>
-#if defined(__linux__) && defined(MSG_FASTOPEN)
+#if defined(__linux__) && defined(TCP_FASTOPEN_CONNECT)
# define TFO_SUPPORTED 1
# define TFO_SKIP_CONNECT 0
# define TFO_USE_SENDTO 0
diff --git a/contrib/libs/c-ares/src/lib/ares_android.c b/contrib/libs/c-ares/src/lib/ares_android.c
index 4c0ffa04f7..06ab8940ad 100644
--- a/contrib/libs/c-ares/src/lib/ares_android.c
+++ b/contrib/libs/c-ares/src/lib/ares_android.c
@@ -27,6 +27,7 @@
# include "ares_private.h"
# include <jni.h>
# include <sys/prctl.h>
+# include "ares_android.h"
static JavaVM *android_jvm = NULL;
static jobject android_connectivity_manager = NULL;
@@ -227,7 +228,7 @@ done:
(*android_jvm)->DetachCurrentThread(android_jvm);
}
- return ret;
+ return (int)ret;
}
int ares_library_android_initialized(void)
diff --git a/contrib/libs/c-ares/src/lib/ares_cookie.c b/contrib/libs/c-ares/src/lib/ares_cookie.c
index 0680fe9ec7..bf9d1ba25d 100644
--- a/contrib/libs/c-ares/src/lib/ares_cookie.c
+++ b/contrib/libs/c-ares/src/lib/ares_cookie.c
@@ -427,7 +427,8 @@ ares_status_t ares_cookie_validate(ares_query_t *query,
/* Resend the request, hopefully it will work the next time as we should
* have recorded a server cookie */
ares__requeue_query(query, now, ARES_SUCCESS,
- ARES_FALSE /* Don't increment try count */);
+ ARES_FALSE /* Don't increment try count */,
+ NULL);
/* Parent needs to drop this response */
return ARES_EBADRESP;
diff --git a/contrib/libs/c-ares/src/lib/ares_getaddrinfo.c b/contrib/libs/c-ares/src/lib/ares_getaddrinfo.c
index f67acdec2f..713acf744a 100644
--- a/contrib/libs/c-ares/src/lib/ares_getaddrinfo.c
+++ b/contrib/libs/c-ares/src/lib/ares_getaddrinfo.c
@@ -528,6 +528,13 @@ static void host_callback(void *arg, ares_status_t status, size_t timeouts,
hquery->nodata_cnt++;
}
next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status);
+ } else if (
+ (status == ARES_ESERVFAIL || status == ARES_EREFUSED) &&
+ ares__name_label_cnt(hquery->names[hquery->next_name_idx-1]) == 1
+ ) {
+ /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a
+ * single label domain name. */
+ next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status);
} else {
end_hquery(hquery, status);
}
diff --git a/contrib/libs/c-ares/src/lib/ares_metrics.c b/contrib/libs/c-ares/src/lib/ares_metrics.c
index aa0ea8c017..0e22fc37e7 100644
--- a/contrib/libs/c-ares/src/lib/ares_metrics.c
+++ b/contrib/libs/c-ares/src/lib/ares_metrics.c
@@ -170,7 +170,7 @@ void ares_metrics_record(const ares_query_t *query, ares_server_t *server,
}
ares__timeval_diff(&tvdiff, &query->ts, &now);
- query_ms = (unsigned int)(tvdiff.sec + (tvdiff.usec / 1000));
+ query_ms = (unsigned int)((tvdiff.sec * 1000) + (tvdiff.usec / 1000));
if (query_ms == 0) {
query_ms = 1;
}
diff --git a/contrib/libs/c-ares/src/lib/ares_private.h b/contrib/libs/c-ares/src/lib/ares_private.h
index b85ecb5e14..263c2a606d 100644
--- a/contrib/libs/c-ares/src/lib/ares_private.h
+++ b/contrib/libs/c-ares/src/lib/ares_private.h
@@ -462,10 +462,14 @@ ares_bool_t ares__timedout(const ares_timeval_t *now,
/* Returns one of the normal ares status codes like ARES_SUCCESS */
ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now);
-ares_status_t ares__requeue_query(ares_query_t *query,
- const ares_timeval_t *now,
- ares_status_t status,
- ares_bool_t inc_try_count);
+ares_status_t ares__requeue_query(ares_query_t *query,
+ const ares_timeval_t *now,
+ ares_status_t status,
+ ares_bool_t inc_try_count,
+ const ares_dns_record_t *dnsrec);
+
+/*! Count the number of labels (dots+1) in a domain */
+size_t ares__name_label_cnt(const char *name);
/*! Retrieve a list of names to use for searching. The first successful
* query in the list wins. This function also uses the HOSTSALIASES file
diff --git a/contrib/libs/c-ares/src/lib/ares_process.c b/contrib/libs/c-ares/src/lib/ares_process.c
index 65ee673f6e..f05f67d8f2 100644
--- a/contrib/libs/c-ares/src/lib/ares_process.c
+++ b/contrib/libs/c-ares/src/lib/ares_process.c
@@ -571,7 +571,7 @@ static void process_timeouts(ares_channel_t *channel, const ares_timeval_t *now)
conn = query->conn;
server_increment_failures(conn->server, query->using_tcp);
- ares__requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE);
+ ares__requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE, NULL);
}
}
@@ -711,7 +711,7 @@ static ares_status_t process_answer(ares_channel_t *channel,
}
server_increment_failures(server, query->using_tcp);
- ares__requeue_query(query, now, status, ARES_TRUE);
+ ares__requeue_query(query, now, status, ARES_TRUE, rdnsrec);
/* Should any of these cause a connection termination?
* Maybe SERVER_FAILURE? */
@@ -756,10 +756,11 @@ static void handle_conn_error(ares_conn_t *conn, ares_bool_t critical_failure,
ares__close_connection(conn, failure_status);
}
-ares_status_t ares__requeue_query(ares_query_t *query,
- const ares_timeval_t *now,
- ares_status_t status,
- ares_bool_t inc_try_count)
+ares_status_t ares__requeue_query(ares_query_t *query,
+ const ares_timeval_t *now,
+ ares_status_t status,
+ ares_bool_t inc_try_count,
+ const ares_dns_record_t *dnsrec)
{
ares_channel_t *channel = query->channel;
size_t max_tries = ares__slist_len(channel->servers) * channel->tries;
@@ -783,7 +784,7 @@ ares_status_t ares__requeue_query(ares_query_t *query,
query->error_status = ARES_ETIMEOUT;
}
- end_query(channel, NULL, query, query->error_status, NULL);
+ end_query(channel, NULL, query, query->error_status, dnsrec);
return ARES_ETIMEOUT;
}
@@ -1078,7 +1079,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
case ARES_ECONNREFUSED:
case ARES_EBADFAMILY:
server_increment_failures(server, query->using_tcp);
- return ares__requeue_query(query, now, status, ARES_TRUE);
+ return ares__requeue_query(query, now, status, ARES_TRUE, NULL);
/* Anything else is not retryable, likely ENOMEM */
default:
@@ -1104,7 +1105,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
case ARES_ECONNREFUSED:
case ARES_EBADFAMILY:
handle_conn_error(conn, ARES_TRUE, status);
- status = ares__requeue_query(query, now, status, ARES_TRUE);
+ status = ares__requeue_query(query, now, status, ARES_TRUE, NULL);
if (status == ARES_ETIMEOUT) {
status = ARES_ECONNREFUSED;
}
@@ -1114,7 +1115,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
* just requeue to a different server/connection. */
default:
server_increment_failures(server, query->using_tcp);
- status = ares__requeue_query(query, now, status, ARES_TRUE);
+ status = ares__requeue_query(query, now, status, ARES_TRUE, NULL);
return status;
}
diff --git a/contrib/libs/c-ares/src/lib/ares_qcache.c b/contrib/libs/c-ares/src/lib/ares_qcache.c
index aee1328b51..9725212fde 100644
--- a/contrib/libs/c-ares/src/lib/ares_qcache.c
+++ b/contrib/libs/c-ares/src/lib/ares_qcache.c
@@ -121,9 +121,11 @@ static char *ares__qcache_calc_key(const ares_dns_record_t *dnsrec)
name_len--;
}
- status = ares__buf_append(buf, (const unsigned char *)name, name_len);
- if (status != ARES_SUCCESS) {
- goto fail; /* LCOV_EXCL_LINE: OutOfMemory */
+ if (name_len > 0) {
+ status = ares__buf_append(buf, (const unsigned char *)name, name_len);
+ if (status != ARES_SUCCESS) {
+ goto fail; /* LCOV_EXCL_LINE: OutOfMemory */
+ }
}
}
@@ -346,8 +348,8 @@ static ares_status_t ares__qcache_insert(ares__qcache_t *qcache,
}
entry->dnsrec = qresp;
- entry->expire_ts = now->sec + (time_t)ttl;
- entry->insert_ts = now->sec;
+ entry->expire_ts = (time_t)now->sec + (time_t)ttl;
+ entry->insert_ts = (time_t)now->sec;
/* We can't guarantee the server responded with the same flags as the
* request had, so we have to re-parse the request in order to generate the
diff --git a/contrib/libs/c-ares/src/lib/ares_search.c b/contrib/libs/c-ares/src/lib/ares_search.c
index ae98df39a8..2d3c0fc514 100644
--- a/contrib/libs/c-ares/src/lib/ares_search.c
+++ b/contrib/libs/c-ares/src/lib/ares_search.c
@@ -107,26 +107,37 @@ static void search_callback(void *arg, ares_status_t status, size_t timeouts,
{
struct search_query *squery = (struct search_query *)arg;
ares_channel_t *channel = squery->channel;
- ares_dns_rcode_t rcode;
- size_t ancount;
+
ares_status_t mystatus;
ares_bool_t skip_cleanup = ARES_FALSE;
squery->timeouts += timeouts;
- if (status != ARES_SUCCESS) {
- end_squery(squery, status, dnsrec);
- return;
- }
-
- rcode = ares_dns_record_get_rcode(dnsrec);
- ancount = ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER);
- mystatus = ares_dns_query_reply_tostatus(rcode, ancount);
-
- if (mystatus != ARES_ENODATA && mystatus != ARES_ESERVFAIL &&
- mystatus != ARES_ENOTFOUND) {
- end_squery(squery, mystatus, dnsrec);
- return;
+ if (dnsrec) {
+ ares_dns_rcode_t rcode = ares_dns_record_get_rcode(dnsrec);
+ size_t ancount = ares_dns_record_rr_cnt(dnsrec,
+ ARES_SECTION_ANSWER);
+ mystatus = ares_dns_query_reply_tostatus(rcode, ancount);
+ } else {
+ mystatus = status;
+ }
+
+ switch (mystatus) {
+ case ARES_ENODATA:
+ case ARES_ENOTFOUND:
+ break;
+ case ARES_ESERVFAIL:
+ case ARES_EREFUSED:
+ /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a
+ * single label domain name. */
+ if (ares__name_label_cnt(squery->names[squery->next_name_idx-1]) != 1) {
+ end_squery(squery, mystatus, dnsrec);
+ return;
+ }
+ break;
+ default:
+ end_squery(squery, mystatus, dnsrec);
+ return;
}
/* If we ever get ARES_ENODATA along the way, record that; if the search
@@ -147,7 +158,6 @@ static void search_callback(void *arg, ares_status_t status, size_t timeouts,
return;
}
-
/* We have no more domains to search, return an appropriate response. */
if (mystatus == ARES_ENOTFOUND && squery->ever_got_nodata) {
end_squery(squery, ARES_ENODATA, NULL);
@@ -176,6 +186,25 @@ static ares_bool_t ares__search_eligible(const ares_channel_t *channel,
return ARES_TRUE;
}
+size_t ares__name_label_cnt(const char *name)
+{
+ const char *p;
+ size_t ndots = 0;
+
+ if (name == NULL) {
+ return 0;
+ }
+
+ for (p = name; p != NULL && *p != 0; p++) {
+ if (*p == '.') {
+ ndots++;
+ }
+ }
+
+ /* Label count is 1 greater than ndots */
+ return ndots+1;
+}
+
ares_status_t ares__search_name_list(const ares_channel_t *channel,
const char *name, char ***names,
size_t *names_len)
@@ -186,7 +215,6 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel,
char *alias = NULL;
size_t ndots = 0;
size_t idx = 0;
- const char *p;
size_t i;
/* Perform HOSTALIASES resolution */
@@ -223,12 +251,10 @@ ares_status_t ares__search_name_list(const ares_channel_t *channel,
goto done;
}
- /* Count the number of dots in name */
- ndots = 0;
- for (p = name; *p != 0; p++) {
- if (*p == '.') {
- ndots++;
- }
+ /* Count the number of dots in name, 1 less than label count */
+ ndots = ares__name_label_cnt(name);
+ if (ndots > 0) {
+ ndots--;
}
/* Allocate an entry for each search domain, plus one for as-is */
diff --git a/contrib/libs/c-ares/src/lib/ares_send.c b/contrib/libs/c-ares/src/lib/ares_send.c
index 9441534404..64ff7edd3a 100644
--- a/contrib/libs/c-ares/src/lib/ares_send.c
+++ b/contrib/libs/c-ares/src/lib/ares_send.c
@@ -62,7 +62,11 @@ static ares_status_t ares_apply_dns0x20(ares_channel_t *channel,
}
len = ares_strlen(name);
- if (len == 0 || len >= sizeof(dns0x20name)) {
+ if (len == 0) {
+ return ARES_SUCCESS;
+ }
+
+ if (len >= sizeof(dns0x20name)) {
status = ARES_EBADNAME;
goto done;
}
diff --git a/contrib/libs/c-ares/src/lib/ares_sysconfig.c b/contrib/libs/c-ares/src/lib/ares_sysconfig.c
index 2cd3df2823..61e6a423a7 100644
--- a/contrib/libs/c-ares/src/lib/ares_sysconfig.c
+++ b/contrib/libs/c-ares/src/lib/ares_sysconfig.c
@@ -239,7 +239,7 @@ static ares_status_t ares__init_sysconfig_android(ares_sysconfig_t *sysconfig)
char propname[PROP_NAME_MAX];
char propvalue[PROP_VALUE_MAX] = "";
for (i = 1; i <= MAX_DNS_PROPERTIES; i++) {
- snprintf(propname, sizeof(propname), "%s%u", DNS_PROP_NAME_PREFIX, i);
+ snprintf(propname, sizeof(propname), "%s%zu", DNS_PROP_NAME_PREFIX, i);
if (__system_property_get(propname, propvalue) < 1) {
break;
}
@@ -494,6 +494,7 @@ ares_status_t ares__init_by_sysconfig(ares_channel_t *channel)
ares_sysconfig_t sysconfig;
memset(&sysconfig, 0, sizeof(sysconfig));
+ sysconfig.ndots = 1; /* Default value if not otherwise set */
#if defined(USE_WINSOCK)
status = ares__init_sysconfig_windows(&sysconfig);
diff --git a/contrib/libs/c-ares/src/lib/dsa/ares__htable.c b/contrib/libs/c-ares/src/lib/dsa/ares__htable.c
index d608d60ce3..9049b3246b 100644
--- a/contrib/libs/c-ares/src/lib/dsa/ares__htable.c
+++ b/contrib/libs/c-ares/src/lib/dsa/ares__htable.c
@@ -59,7 +59,7 @@ static unsigned int ares__htable_generate_seed(ares__htable_t *htable)
* collision attack is very low with a small amount of effort */
seed |= (unsigned int)((size_t)htable & 0xFFFFFFFF);
seed |= (unsigned int)((size_t)&seed & 0xFFFFFFFF);
- seed |= (unsigned int)(t & 0xFFFFFFFF);
+ seed |= (unsigned int)(((ares_uint64_t)t) & 0xFFFFFFFF);
return seed;
}
diff --git a/contrib/libs/c-ares/src/lib/event/ares_event_configchg.c b/contrib/libs/c-ares/src/lib/event/ares_event_configchg.c
index 030c76c69c..10f0e21dde 100644
--- a/contrib/libs/c-ares/src/lib/event/ares_event_configchg.c
+++ b/contrib/libs/c-ares/src/lib/event/ares_event_configchg.c
@@ -31,6 +31,8 @@
ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg,
ares_event_thread_t *e)
{
+ (void)configchg;
+ (void)e;
/* No ability */
return ARES_ENOTIMP;
}
@@ -38,6 +40,7 @@ ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg,
void ares_event_configchg_destroy(ares_event_configchg_t *configchg)
{
/* No-op */
+ (void)configchg;
}
#elif defined(__linux__)
@@ -107,7 +110,7 @@ static void ares_event_configchg_cb(ares_event_thread_t *e, ares_socket_t fd,
* size provided, so I assume it won't ever return partial events. */
for (ptr = buf; ptr < buf + len;
ptr += sizeof(struct inotify_event) + event->len) {
- event = (const struct inotify_event *)ptr;
+ event = (const struct inotify_event *)((const void *)ptr);
if (event->len == 0 || ares_strlen(event->name) == 0) {
continue;
diff --git a/contrib/libs/c-ares/src/lib/str/ares__buf.c b/contrib/libs/c-ares/src/lib/str/ares__buf.c
index b855260ab3..bf6d4a0e1d 100644
--- a/contrib/libs/c-ares/src/lib/str/ares__buf.c
+++ b/contrib/libs/c-ares/src/lib/str/ares__buf.c
@@ -213,10 +213,14 @@ ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data,
{
ares_status_t status;
- if (data == NULL || data_len == 0) {
+ if (data == NULL && data_len != 0) {
return ARES_EFORMERR;
}
+ if (data_len == 0) {
+ return ARES_SUCCESS;
+ }
+
status = ares__buf_ensure_space(buf, data_len);
if (status != ARES_SUCCESS) {
return status;
diff --git a/contrib/libs/c-ares/ya.make b/contrib/libs/c-ares/ya.make
index 864edf40a5..dc862a70fe 100644
--- a/contrib/libs/c-ares/ya.make
+++ b/contrib/libs/c-ares/ya.make
@@ -12,9 +12,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(1.33.0)
+VERSION(1.33.1)
-ORIGINAL_SOURCE(https://github.com/c-ares/c-ares/archive/v1.33.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/c-ares/c-ares/archive/v1.33.1.tar.gz)
PEERDIR(
contrib/libs/libc_compat