Skip to content

Commit d51327c

Browse files
committed
Merge pull request #912 from luc-github/esp8266
DNSServer: add _buffer initialization and some sanity check
2 parents 92571aa + fa98116 commit d51327c

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

hardware/esp8266com/esp8266/libraries/DNSServer/src/DNSServer.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ bool DNSServer::start(const uint16_t &port, const String &domainName,
1313
const IPAddress &resolvedIP)
1414
{
1515
_port = port;
16+
_buffer = NULL;
1617
_domainName = domainName;
1718
_resolvedIP[0] = resolvedIP[0];
1819
_resolvedIP[1] = resolvedIP[1];
@@ -35,6 +36,8 @@ void DNSServer::setTTL(const uint32_t &ttl)
3536
void DNSServer::stop()
3637
{
3738
_udp.stop();
39+
free(_buffer);
40+
_buffer = NULL;
3841
}
3942

4043
void DNSServer::downcaseAndRemoveWwwPrefix(String &domainName)
@@ -48,7 +51,9 @@ void DNSServer::processNextRequest()
4851
_currentPacketSize = _udp.parsePacket();
4952
if (_currentPacketSize)
5053
{
54+
if (_buffer != NULL) free(_buffer);
5155
_buffer = (unsigned char*)malloc(_currentPacketSize * sizeof(char));
56+
if (_buffer == NULL) return;
5257
_udp.read(_buffer, _currentPacketSize);
5358
_dnsHeader = (DNSHeader*) _buffer;
5459

@@ -66,6 +71,7 @@ void DNSServer::processNextRequest()
6671
}
6772

6873
free(_buffer);
74+
_buffer = NULL;
6975
}
7076
}
7177

@@ -80,6 +86,7 @@ bool DNSServer::requestIncludesOnlyOneQuestion()
8086
String DNSServer::getDomainNameWithoutWwwPrefix()
8187
{
8288
String parsedDomainName = "";
89+
if (_buffer == NULL) return parsedDomainName;
8390
unsigned char *start = _buffer + 12;
8491
if (*start == 0)
8592
{
@@ -109,6 +116,7 @@ String DNSServer::getDomainNameWithoutWwwPrefix()
109116

110117
void DNSServer::replyWithIP()
111118
{
119+
if (_buffer == NULL) return;
112120
_dnsHeader->QR = DNS_QR_RESPONSE;
113121
_dnsHeader->ANCount = _dnsHeader->QDCount;
114122
_dnsHeader->QDCount = _dnsHeader->QDCount;
@@ -152,11 +160,12 @@ void DNSServer::replyWithIP()
152160

153161
void DNSServer::replyWithCustomCode()
154162
{
163+
if (_buffer == NULL) return;
155164
_dnsHeader->QR = DNS_QR_RESPONSE;
156165
_dnsHeader->RCode = (unsigned char)_errorReplyCode;
157166
_dnsHeader->QDCount = 0;
158167

159168
_udp.beginPacket(_udp.remoteIP(), _udp.remotePort());
160169
_udp.write(_buffer, sizeof(DNSHeader));
161170
_udp.endPacket();
162-
}
171+
}

0 commit comments

Comments
 (0)