controls/options “clear” • Selected platform may drive/ restrict language choices % grep -Er "\s(mem|str)cpy\(" .
…
./apps/http-post-auth/http-post-auth.c: strcpy(s->message, "status=");
./apps/http-post-auth/http-post-auth.c: strcpy(&s->message[7], msg);
./apps/irc/irc.c: memcpy(log, &log[LOG_WIDTH], LOG_WIDTH * (LOG_HEIGHT - 1));
./apps/irc/irc.c: memcpy(log, &log[LOG_WIDTH], LOG_WIDTH * (LOG_HEIGHT - 1));
./apps/ping6/ping6.c: memcpy(command, (void *)"ping6", 5);
./apps/rest-coap/coap-common.c: memcpy(
./apps/rest-coap/coap-common.c: memcpy((char*)&buffer[index], option->value, option->len);
./apps/rest-coap/coap-common.c: memcpy(&buffer[index], packet->payload, packet->payload_len);
./apps/rest-coap/coap-server.c: memcpy(option->value, value, len);
./apps/rest-common/buffer.c: memcpy(buffer, data, len);
./apps/rest-common/buffer.c: strcpy(buffer, text);
./apps/rest-common/rest-util.c: memcpy(p + 4 - size, buf, size);
./apps/rest-common/rest-util.c: memcpy(buf, ((char*)(&data)) + 4 - size, size);
./apps/rest-common/rest.c: memcpy(temp_etag, etag, size);
./apps/rest-http/http-server.c: strcpy(current_header->value, value);
./apps/rest-http/http-server.c: strcpy(current_header->value, buffer);
./apps/rest-http/http-server.c: memcpy(buffer + index, response->payload, response->payload_len); • “Me write Python/Ruby/ Node/… pretty one day” (or worse, C) • History repeating…? Quick grep for potentially dangerous functions in someone’s Contiki project