&& (strcmp(buf, MDNS_DEFAULT_DOMAIN) != 0)
&& (strcmp(buf, "ip6") != 0)
&& (strcmp(buf, "in-addr") != 0)) {
- sprintf((char*)name, "%s.%s", name->host, buf);
+ snprintf((char*)name, MDNS_NAME_BUF_LEN, "%s.%s", name->host, buf);
} else if (strcmp(buf, MDNS_SUB_STR) == 0) {
name->sub = 1;
} else {
}
} else {
size_t address = (((uint16_t)len & 0x3F) << 8) | start[index++];
- if ((packet + address) > start) {
+ if ((packet + address) >= start) {
//reference address can not be after where we are
return NULL;
}
s->txt = NULL;
s->port = port;
- s->service = strdup(service);
+ s->service = strndup(service, MDNS_NAME_BUF_LEN - 1);
if (!s->service) {
free(s);
return NULL;
}
- s->proto = strdup(proto);
+ s->proto = strndup(proto, MDNS_NAME_BUF_LEN - 1);
if (!s->proto) {
free((char *)s->service);
free(s);
(strcmp(name->proto, server->search.proto) != 0)) {
continue;//not searching for service or wrong service/proto
}
- sprintf(answer->instance, "%s", name->host);
+ strlcpy(answer->instance, name->host, MDNS_NAME_BUF_LEN);
} else if (type == MDNS_TYPE_SRV) {
if (server->search.host[0] ||
(strcmp(name->service, server->search.service) != 0) ||
continue;//instance name is not the same as the one in the PTR record
}
} else {
- sprintf(answer->instance, "%s", name->host);
+ strlcpy(answer->instance, name->host, MDNS_NAME_BUF_LEN);
}
//parse record value
if (!_mdns_parse_fqdn(data, data_ptr + MDNS_SRV_FQDN_OFFSET, name)) {
if (answer->host[0]) {
if (strcmp(answer->host, name->host) != 0) {
answer->addr = 0;
- sprintf(answer->host, "%s", name->host);
+ strlcpy(answer->host, name->host, MDNS_NAME_BUF_LEN);
}
} else {
- sprintf(answer->host, "%s", name->host);
+ strlcpy(answer->host, name->host, MDNS_NAME_BUF_LEN);
}
} else if (type == MDNS_TYPE_TXT) {
uint16_t i=0,b=0, y;
while(i < data_len) {
uint8_t partLen = data_ptr[i++];
+ //check if partLen will fit in the buffer
+ if (partLen > (MDNS_TXT_MAX_LEN - b - 1)) {
+ break;
+ }
for(y=0; y<partLen; y++) {
char d = data_ptr[i++];
answer->txt[b++] = d;
continue;//wrong host
}
} else if (!answer->ptr) {
- sprintf(answer->host, "%s", name->host);
+ strlcpy(answer->host, name->host, MDNS_NAME_BUF_LEN);
} else if (strcmp(answer->host, name->host) != 0) {
continue;//wrong host
}
continue;//wrong host
}
} else if (!answer->ptr) {
- sprintf(answer->host, "%s", name->host);
+ strlcpy(answer->host, name->host, MDNS_NAME_BUF_LEN);
} else if (strcmp(answer->host, name->host) != 0) {
continue;//wrong host
}
if (!server) {
return ESP_ERR_INVALID_ARG;
}
+ if (strlen(hostname) > (MDNS_NAME_BUF_LEN - 1)) {
+ return ESP_ERR_INVALID_ARG;
+ }
MDNS_MUTEX_LOCK();
free((char*)server->hostname);
server->hostname = (char *)malloc(strlen(hostname)+1);
MDNS_MUTEX_UNLOCK();
return ESP_ERR_NO_MEM;
}
- sprintf((char *)server->hostname, "%s", hostname);
+ strlcpy((char *)server->hostname, hostname, MDNS_NAME_BUF_LEN);
MDNS_MUTEX_UNLOCK();
return ERR_OK;
}
if (!server) {
return ESP_ERR_INVALID_ARG;
}
+ if (strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) {
+ return ESP_ERR_INVALID_ARG;
+ }
MDNS_MUTEX_LOCK();
free((char*)server->instance);
server->instance = (char *)malloc(strlen(instance)+1);
MDNS_MUTEX_UNLOCK();
return ESP_ERR_NO_MEM;
}
- sprintf((char *)server->instance, "%s", instance);
+ strlcpy((char *)server->instance, instance, MDNS_NAME_BUF_LEN);
MDNS_MUTEX_UNLOCK();
return ERR_OK;
}
if (!server || !server->services || !service || !proto) {
return ESP_ERR_INVALID_ARG;
}
+ if (strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) {
+ return ESP_ERR_INVALID_ARG;
+ }
mdns_srv_item_t * s = _mdns_get_service_item(server, service, proto);
if (!s) {
return ESP_ERR_NOT_FOUND;
mdns_result_free(server);
if (proto) {
server->search.host[0] = 0;
- snprintf(server->search.service, MDNS_NAME_MAX_LEN, "%s", service);
- snprintf(server->search.proto, MDNS_NAME_MAX_LEN, "%s", proto);
+ strlcpy(server->search.service, service, MDNS_NAME_BUF_LEN);
+ strlcpy(server->search.proto, proto, MDNS_NAME_BUF_LEN);
} else {
- snprintf(server->search.host, MDNS_NAME_MAX_LEN, "%s", service);
+ strlcpy(server->search.host, service, MDNS_NAME_BUF_LEN);
server->search.service[0] = 0;
server->search.proto[0] = 0;
qtype = MDNS_TYPE_A;