--- src/ctrls.c 2006/10/24 16:13:31 1.14 +++ src/ctrls.c 2006/12/12 16:34:43 1.15 @@ -534,11 +534,20 @@ return -1; } + if (reqarglen >= sizeof(reqaction)) { + pr_signals_unblock(); + errno = ENOMEM; + return -1; + } + + memset(reqaction, '\0', sizeof(reqaction)); + if (read(cl->cl_fd, reqaction, reqarglen) < 0) { pr_signals_unblock(); return -1; } + reqaction[sizeof(reqaction)-1] = '\0'; nreqargs--; /* Find a matching action object, and use it to populate a ctrl object, @@ -657,17 +666,16 @@ return -1; } - memset(response, '\0', sizeof(response)); - /* Make sure resparglen is not too big */ - if (resparglen > sizeof(response)) { + if (resparglen >= sizeof(response)) { pr_signals_unblock(); errno = ENOMEM; return -1; } - bread = read(ctrls_sockfd, response, resparglen); + memset(response, '\0', sizeof(response)); + bread = read(ctrls_sockfd, response, resparglen); while (bread != resparglen) { if (bread < 0) { pr_signals_unblock();