printf-hook-builtin: Correctly calculate written bytes in print_in_hook()
authorMartin Willi <martin@revosec.ch>
Wed, 15 Jan 2014 17:18:24 +0000 (18:18 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 15 Jan 2014 17:28:43 +0000 (18:28 +0100)
The hook data counts remaining buffer bytes, not used ones. Counting them
correctly fixes a crash for long hexdumps.

Further, print_in_hook() must return the number of bytes that would have been
written, not the actually written bytes. This is important, as we allocate a
dynamic buffer in bus that relies on the exact byte count. Fixes long hexdumps
that got truncated.

src/libstrongswan/utils/printf_hook/printf_hook_builtin.c

index 7ed3979..c79d4b8 100644 (file)
@@ -122,10 +122,14 @@ size_t print_in_hook(printf_hook_data_t *data, char *fmt, ...)
 
        if (written > data->n)
        {
-               written = data->n;
+               data->q += data->n;
+               data->n = 0;
+       }
+       else
+       {
+               data->q += written;
+               data->n -= written;
        }
-       data->q += written;
-       data->n += written;
        return written;
 }