Previously, the terminating zero of variable-sized c strings was only
included when copying the message if the length of the string was not
a multiple of four.  mig_strncpy returns the length of the string
excluding the terminating zero.  Fix this by properly accounting for
the byte for the terminating zero in the array length.

* server.c (WritePackArgValue): Account for the terminating zero in
the array length.
* user.c (WritePackArgValue): Likewise.
---
 server.c | 5 +++++
 user.c   | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/server.c b/server.c
index 129cec3..a3368f6 100644
--- a/server.c
+++ b/server.c
@@ -912,6 +912,11 @@ WritePackArgValue(FILE *file, const argument_t *arg)
                arg->argMsgField,
                arg->argVarName,
                it->itNumber);
+           fprintf(file,
+               "\tif (OutP->%s < %d) OutP->%s += 1;\n",
+               arg->argCount->argMsgField,
+               it->itNumber,
+               arg->argCount->argMsgField);
        }
        else {
            argument_t *count = arg->argCount;
diff --git a/user.c b/user.c
index 37f53d2..f4a6cd5 100644
--- a/user.c
+++ b/user.c
@@ -411,6 +411,11 @@ WritePackArgValue(FILE *file, const argument_t *arg)
                arg->argMsgField,
                arg->argVarName,
                it->itNumber);
+           fprintf(file,
+               "\tif (InP->%s < %d) InP->%s += 1;\n",
+               arg->argCount->argMsgField,
+               it->itNumber,
+               arg->argCount->argMsgField);
        }
        else {
 
-- 
1.8.5.2


Reply via email to