Commit 0fd939e714f1df31223897de6bc6528e0a393623

Kano 2013-09-23T09:01:00

klondike - fix chipstats api stats buffer overrun with 16 chips

diff --git a/driver-klondike.c b/driver-klondike.c
index b11c21d..1be043a 100644
--- a/driver-klondike.c
+++ b/driver-klondike.c
@@ -584,18 +584,24 @@ static struct api_data *klondike_api_stats(struct cgpu_info *klncgpu)
 		root = api_add_int(root, buf, (int *)(&iFan), true);
 		
 		if (klninfo->devinfo[dev].chipstats != NULL) {
-			char data[128];
+			char data[2048];
+			char one[32];
 			int n;
+
 			sprintf(buf, "Nonces / Chip %d", dev);
-			for (n = 0; n < klninfo->status[dev].chipcount; n++)
-				sprintf(data+n*8, "%07d ", klninfo->devinfo[dev].chipstats[n]);
-			data[127] = 0;
+			data[0] = '\0';
+			for (n = 0; n < klninfo->status[dev].chipcount; n++) {
+				snprintf(one, sizeof(one), "%07d ", klninfo->devinfo[dev].chipstats[n]);
+				strcat(data, one);
+			}
 			root = api_add_string(root, buf, data, true);
 		
 			sprintf(buf, "Errors / Chip %d", dev);
-			for (n = 0; n < klninfo->status[dev].chipcount; n++)
-				sprintf(data+n*8, "%07d ", klninfo->devinfo[dev].chipstats[n + klninfo->status[dev].chipcount]);
-			data[127] = 0;
+			data[0] = '\0';
+			for (n = 0; n < klninfo->status[dev].chipcount; n++) {
+				snprintf(one, sizeof(one), "%07d ", klninfo->devinfo[dev].chipstats[n + klninfo->status[dev].chipcount]);
+				strcat(data, one);
+			}
 			root = api_add_string(root, buf, data, true);
 		}
 	}