Check total string length of supplied DNS servers
Make sure the number of DNS servers doesn't grow past what we were
planning on handling in our string buffer.
Change-Id: Ic2d60b0a4363c806d4c3a7dfafa62930c4f5ca1f
diff --git a/TetherController.cpp b/TetherController.cpp
index 3485a62..08f6bb1 100644
--- a/TetherController.cpp
+++ b/TetherController.cpp
@@ -168,11 +168,14 @@
return (mDaemonPid == 0 ? false : true);
}
+#define MAX_CMD_SIZE 1024
+
int TetherController::setDnsForwarders(char **servers, int numServers) {
int i;
- char daemonCmd[1024];
+ char daemonCmd[MAX_CMD_SIZE];
strcpy(daemonCmd, "update_dns");
+ int cmdLen = strlen(daemonCmd);
mDnsForwarders->clear();
for (i = 0; i < numServers; i++) {
@@ -185,6 +188,13 @@
mDnsForwarders->clear();
return -1;
}
+
+ cmdLen += strlen(servers[i]);
+ if (cmdLen + 2 >= MAX_CMD_SIZE) {
+ LOGD("Too many DNS servers listed");
+ break;
+ }
+
strcat(daemonCmd, ":");
strcat(daemonCmd, servers[i]);
mDnsForwarders->push_back(a);