From 64754524ecf8fb244046b60be4789f13d7a710b5 Mon Sep 17 00:00:00 2001 From: luc Date: Wed, 21 Oct 2015 15:30:48 +0800 Subject: [PATCH] Add _buffer initialization and some sanity check This seems fix the Exception (28)/ (9) that occur on Captive portal with Soft AP --- libraries/DNSServer/src/DNSServer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/DNSServer/src/DNSServer.cpp b/libraries/DNSServer/src/DNSServer.cpp index 5cd5535da..3c31717b0 100644 --- a/libraries/DNSServer/src/DNSServer.cpp +++ b/libraries/DNSServer/src/DNSServer.cpp @@ -13,6 +13,7 @@ bool DNSServer::start(const uint16_t &port, const String &domainName, const IPAddress &resolvedIP) { _port = port; + _buffer = NULL; _domainName = domainName; _resolvedIP[0] = resolvedIP[0]; _resolvedIP[1] = resolvedIP[1]; @@ -35,6 +36,8 @@ void DNSServer::setTTL(const uint32_t &ttl) void DNSServer::stop() { _udp.stop(); + free(_buffer); + _buffer = NULL; } void DNSServer::downcaseAndRemoveWwwPrefix(String &domainName) @@ -48,7 +51,9 @@ void DNSServer::processNextRequest() _currentPacketSize = _udp.parsePacket(); if (_currentPacketSize) { + if (_buffer != NULL) free(_buffer); _buffer = (unsigned char*)malloc(_currentPacketSize * sizeof(char)); + if (_buffer == NULL) return; _udp.read(_buffer, _currentPacketSize); _dnsHeader = (DNSHeader*) _buffer; @@ -66,6 +71,7 @@ void DNSServer::processNextRequest() } free(_buffer); + _buffer = NULL; } } @@ -80,6 +86,7 @@ bool DNSServer::requestIncludesOnlyOneQuestion() String DNSServer::getDomainNameWithoutWwwPrefix() { String parsedDomainName = ""; + if (_buffer == NULL) return parsedDomainName; unsigned char *start = _buffer + 12; if (*start == 0) { @@ -109,6 +116,7 @@ String DNSServer::getDomainNameWithoutWwwPrefix() void DNSServer::replyWithIP() { + if (_buffer == NULL) return; _dnsHeader->QR = DNS_QR_RESPONSE; _dnsHeader->ANCount = _dnsHeader->QDCount; _dnsHeader->QDCount = _dnsHeader->QDCount; @@ -152,6 +160,7 @@ void DNSServer::replyWithIP() void DNSServer::replyWithCustomCode() { + if (_buffer == NULL) return; _dnsHeader->QR = DNS_QR_RESPONSE; _dnsHeader->RCode = (unsigned char)_errorReplyCode; _dnsHeader->QDCount = 0; @@ -159,4 +168,4 @@ void DNSServer::replyWithCustomCode() _udp.beginPacket(_udp.remoteIP(), _udp.remotePort()); _udp.write(_buffer, sizeof(DNSHeader)); _udp.endPacket(); -} \ No newline at end of file +}