diff options
author | miau <miaukatzemiau@priveasy.de> | 2011-12-02 09:53:52 (GMT) |
---|---|---|
committer | miau <miaukatzemiau@priveasy.de> | 2011-12-02 09:53:52 (GMT) |
commit | 7563a58379c27532fe7c086881d8b6c562d28ac1 (patch) | |
tree | 9482a8b422a35cd0f17a97839918189dd7d73731 | |
parent | b8ca97e5b02d74c4146808948259a7489fd9b165 (diff) |
broadcaster: check payload size for stdin, fix off-by-one
-rw-r--r-- | src/broadcaster.c | 11 |
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); } |