Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33a78903 authored by Maciej Żenczykowski's avatar Maciej Żenczykowski Committed by Gerrit Code Review
Browse files

Merge "Accommodate a change in the type of std::span's size" into main

parents c3f77721 78c99995
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1048,8 +1048,8 @@ void DnsProxyListener::ResNSendHandler::run() {
    uint16_t original_query_id = 0;

    // TODO: Handle the case which is msg contains more than one query
    if (!parseQuery({msg.data(), msgLen}, &original_query_id, &rr_type, &rr_name) ||
        !setQueryId({msg.data(), msgLen}, arc4random_uniform(65536))) {
    if (!parseQuery(std::span(msg.data(), msgLen), &original_query_id, &rr_type, &rr_name) ||
        !setQueryId(std::span(msg.data(), msgLen), arc4random_uniform(65536))) {
        // If the query couldn't be parsed, block the request.
        LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid << ", invalid query";
        sendBE32(mClient, -EINVAL);
@@ -1064,7 +1064,7 @@ void DnsProxyListener::ResNSendHandler::run() {
    initDnsEvent(&event, mNetContext);
    if (startQueryLimiter(uid)) {
        if (evaluate_domain_name(mNetContext, rr_name.c_str())) {
            ansLen = resolv_res_nsend(&mNetContext, {msg.data(), msgLen}, ansBuf, &rcode,
            ansLen = resolv_res_nsend(&mNetContext, std::span(msg.data(), msgLen), ansBuf, &rcode,
                                      static_cast<ResNsendFlags>(mFlags), &event);
        } else {
            ansLen = -EAI_SYSTEM;
@@ -1102,7 +1102,7 @@ void DnsProxyListener::ResNSendHandler::run() {
    }

    // Restore query id
    if (!setQueryId({ansBuf.data(), ansLen}, original_query_id)) {
    if (!setQueryId(std::span(ansBuf.data(), ansLen), original_query_id)) {
        LOG(WARNING) << "ResNSendHandler::run: resnsend: failed to restore query id";
        return;
    }
@@ -1117,7 +1117,7 @@ void DnsProxyListener::ResNSendHandler::run() {
    if (rr_type == ns_t_a || rr_type == ns_t_aaaa) {
        std::vector<std::string> ip_addrs;
        const int total_ip_addr_count =
                extractResNsendAnswers({ansBuf.data(), ansLen}, rr_type, &ip_addrs);
                extractResNsendAnswers(std::span(ansBuf.data(), ansLen), rr_type, &ip_addrs);
        reportDnsEvent(INetdEventListener::EVENT_RES_NSEND, mNetContext, latencyUs,
                       resNSendToAiError(ansLen, rcode), event, rr_name, ip_addrs,
                       total_ip_addr_count);
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ base::Result<void> sendUdpQuery(netdutils::IPAddress ip, uint32_t mark,
        return ErrnoErrorf("connect failed");
    }

    if (send(fd, query.data(), query.size(), 0) != query.size()) {
    if (send(fd, query.data(), query.size(), 0) != static_cast<ptrdiff_t>(query.size())) {
        return ErrnoErrorf("send failed");
    }

+4 −2
Original line number Diff line number Diff line
@@ -1637,7 +1637,8 @@ QueryResult doQuery(const char* name, res_target* t, ResState* res,
    ResState res_temp = res->clone(&event);

    int rcode = NOERROR;
    n = res_nsend(&res_temp, {buf, n}, {t->answer.data(), anslen}, &rcode, 0, sleepTimeMs);
    n = res_nsend(&res_temp, std::span(buf, n), std::span(t->answer.data(), anslen), &rcode, 0,
                  sleepTimeMs);
    if (n < 0 || hp->rcode != NOERROR || ntohs(hp->ancount) == 0) {
        if (rcode != RCODE_TIMEOUT) rcode = hp->rcode;
        // if the query choked with EDNS0, retry without EDNS0
@@ -1646,7 +1647,8 @@ QueryResult doQuery(const char* name, res_target* t, ResState* res,
            (res_temp.flags & RES_F_EDNS0ERR)) {
            LOG(INFO) << __func__ << ": retry without EDNS0";
            n = res_nmkquery(QUERY, name, cl, type, {}, buf, res_temp.netcontext_flags);
            n = res_nsend(&res_temp, {buf, n}, {t->answer.data(), anslen}, &rcode, 0);
            n = res_nsend(&res_temp, std::span(buf, n), std::span(t->answer.data(), anslen), &rcode,
                          0);
        }
    }

+3 −3
Original line number Diff line number Diff line
@@ -1214,7 +1214,7 @@ static void _cache_remove_oldest(Cache* cache) {
        return;
    }
    LOG(DEBUG) << __func__ << ": Cache full - removing oldest";
    res_pquery({oldest->query, oldest->querylen});
    res_pquery(std::span(oldest->query, oldest->querylen));
    _cache_remove_p(cache, lookup);
}

@@ -1318,13 +1318,13 @@ ResolvCacheStatus resolv_cache_lookup(unsigned netid, span<const uint8_t> query,
    /* remove stale entries here */
    if (now >= e->expires) {
        LOG(DEBUG) << __func__ << ": NOT IN CACHE (STALE ENTRY " << *lookup << "DISCARDED)";
        res_pquery({e->query, e->querylen});
        res_pquery(std::span(e->query, e->querylen));
        _cache_remove_p(cache, lookup);
        return RESOLV_CACHE_NOTFOUND;
    }

    *answerlen = e->answerlen;
    if (e->answerlen > answer.size()) {
    if (e->answerlen > static_cast<ptrdiff_t>(answer.size())) {
        /* NOTE: we return UNSUPPORTED if the answer buffer is too short */
        LOG(INFO) << __func__ << ": ANSWER TOO LONG";
        return RESOLV_CACHE_UNSUPPORTED;
+1 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ int res_nmkquery(int op, // opcode of query
            /*
             * Initialize answer section
             */
            if (ep - cp < 1 + RRFIXEDSZ + data.size()) return (-1);
            if (ep - cp < static_cast<ptrdiff_t>(1 + RRFIXEDSZ + data.size())) return (-1);
            *cp++ = '\0'; /* no domain name */
            *reinterpret_cast<uint16_t*>(cp) = htons(type);
            cp += INT16SZ;
Loading