@@ -144,7 +144,7 @@ int8_t resolve_net(char* domain, char* output, uint16_t nsType) {
144
144
strcpy (buf + 12 , qname );
145
145
146
146
uint8_t typePos = 12 + domainLen + 2 ; // header + domain + octetCounter + \0
147
- buf [typePos ] = (nsType >> 8 ) & 0xFF ;
147
+ buf [typePos ] = (nsType >> 8 ) & 0xFF ; // set type
148
148
buf [typePos + 1 ] = nsType & 0xFF ;
149
149
buf [typePos + 3 ] = 0x01 ;
150
150
send_net (conn , buf , typePos + 4 );
@@ -158,25 +158,26 @@ int8_t resolve_net(char* domain, char* output, uint16_t nsType) {
158
158
strcpy (output , "No results" );
159
159
return -2 ;
160
160
}
161
- uint16_t answStart = 12 + domainLen + 2 + 4 ; // header(12) + QName + QTYPEQCLASS(4)
162
161
output [0 ] = 0 ;
163
- for (uint8_t i = 0 ; i < answerCount ; i ++ ) {
162
+ uint16_t answStart = 12 + domainLen + 2 + 4 ; // header(12) + QName + QTYPEQCLASS(4)
163
+ for (uint8_t v = 0 ; v < answerCount ; v ++ ) {
164
164
// answStart + 0 | 2b NAME pointer
165
165
// answStart + 2 | 2b Dns type
166
166
// answStart + 4 | 2b Class
167
167
// answStart + 6 | 4b TTL
168
168
// answStart + 10 | 2b RDATA len
169
169
// answStart + 12 | xb RDATA
170
- uint16_t rdatalen = (buf [answStart + 10 ] << 8 ) | (buf [answStart + 11 ]) - 1 ;
170
+ uint16_t rdatalen = (buf [answStart + 10 ] << 8 ) | (buf [answStart + 11 ]);
171
171
uint16_t outputLen = strlen (output );
172
- if (outputLen != 0 ) {output [outputLen ] = ' ' ; outputLen ++ ;}
172
+ if (outputLen != 0 ) {output [outputLen ] = ' ' ; outputLen ++ ; output [ outputLen ] = 0 ; }
173
173
if (nsType == dnsA ) { // A
174
174
if ((buf [answStart + 2 ] << 8 | (buf [answStart + 3 ]) == nsType )) {
175
- char ipbytes [4 ];
176
- ipbytes [0 ] = buf [answStart + 12 ];
177
- ipbytes [1 ] = buf [answStart + 13 ];
178
- ipbytes [2 ] = buf [answStart + 14 ];
179
- ipbytes [3 ] = buf [answStart + 15 ];
175
+ char ipbytes [5 ] = "" ;
176
+ uint16_t ipIndex = answStart + 12 ;
177
+ ipbytes [0 ] = buf [ipIndex ];
178
+ ipbytes [1 ] = buf [ipIndex + 1 ];
179
+ ipbytes [2 ] = buf [ipIndex + 2 ];
180
+ ipbytes [3 ] = buf [ipIndex + 3 ];
180
181
inet_ntop (AF_INET , ipbytes , output + outputLen , INET_ADDRSTRLEN );
181
182
}
182
183
} else if (nsType == dnsCAA ) { // CAA
@@ -229,14 +230,14 @@ int8_t resolve_net(char* domain, char* output, uint16_t nsType) {
229
230
}
230
231
} else { // TXT, CNAME...
231
232
uint16_t e = 0 ;
233
+ char rdata [rdatalen + 1 ];
232
234
for (; e < rdatalen ; e ++ ) {
233
- char rdata [rdatalen ];
234
235
rdata [e ] = buf [answStart + 13 + e ];
235
- strcpy (output + outputLen , rdata );
236
236
}
237
+ rdata [rdatalen - 1 ] = 0 ;
238
+ strcpy (output + outputLen , rdata );
237
239
}
238
- answStart += domainLen + 12 + rdatalen + 3 ;
239
- i ++ ;
240
+ answStart += 12 + rdatalen ;
240
241
}
241
242
close_net (conn );
242
243
return 0 ;
0 commit comments