summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormiau <miaukatzemiau@priveasy.de>2011-12-02 09:53:52 (GMT)
committermiau <miaukatzemiau@priveasy.de>2011-12-02 09:53:52 (GMT)
commit7563a58379c27532fe7c086881d8b6c562d28ac1 (patch)
tree9482a8b422a35cd0f17a97839918189dd7d73731
parentb8ca97e5b02d74c4146808948259a7489fd9b165 (diff)
broadcaster: check payload size for stdin, fix off-by-one
-rw-r--r--src/broadcaster.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/broadcaster.c b/src/broadcaster.c
index bd80a5c..66d6b58 100644
--- a/src/broadcaster.c
+++ b/src/broadcaster.c
@@ -26,10 +26,14 @@ int main(int argc, char **argv)
if (strcmp(message, "-") == 0) {
/* read payload from stdin */
int i;
- while ((MAXBUFLEN-total_len > 0)
- && ((i = read(0, &(buf[total_len]), MAXBUFLEN-total_len)) > 0))
+ while ((MAXBUFLEN - total_len - 1 > 0)
+ && ((i = read(0, &(buf[total_len]), MAXBUFLEN - total_len - 1)) > 0))
total_len += i;
ENP(i, "read(stdin)");
+ if (read(0, &i, 1) != 0) {
+ fprintf(stderr, "payload to long: max %d bytes\n", MAXBUFLEN - 1);
+ exit(1);
+ }
}else{
/* use cmd line for payload */
total_len += strlen(message);
@@ -37,7 +41,8 @@ int main(int argc, char **argv)
strcpy(buf + 1 + task_len, message);
}
if (total_len > MAXBUFLEN) {
- fprintf(stderr,"payload to long: max %d bytes, was %d\n", MAXBUFLEN, total_len);
+ fprintf(stderr,"payload to long: max %d bytes, was %d\n",
+ MAXBUFLEN - 1, total_len);
exit(1);
}
contact: Jan Huwald // Impressum