]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
allocate message based on encoded size
authorAlan T. DeKok <aland@freeradius.org>
Thu, 22 Jun 2017 19:58:40 +0000 (15:58 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 22 Jun 2017 19:58:40 +0000 (15:58 -0400)
src/lib/io/worker.c

index 2762a1dc3b3c94199590f57ce1187621f2e3c960..cc7e3b1cfcba2524f0267beafe5a2e5539ebde67 100644 (file)
@@ -422,7 +422,7 @@ static void fr_worker_send_reply(fr_worker_t *worker, REQUEST *request, size_t s
         *      Encode it, if required.
         */
        if (size) {
-               ssize_t encoded = 0, slen = 0;
+               ssize_t slen = 0;
                fr_listen_t const *listen = request->async->listen;
 
                if (listen->app->encode) {
@@ -432,12 +432,15 @@ static void fr_worker_send_reply(fr_worker_t *worker, REQUEST *request, size_t s
                        slen = listen->app_io->encode(listen->app_io_instance, request,
                                                      reply->m.data, reply->m.rb_size);
                }
-               if (slen < 0) fr_log(worker->log, L_DBG, "\t%sfails encode", worker->name);
+               if (slen < 0) {
+                       fr_log(worker->log, L_DBG, "\t%sfails encode", worker->name);
+                       slen = 0;
+               }
 
                /*
                 *      Resize the buffer to the actual packet size.
                 */
-               cd = (fr_channel_data_t *) fr_message_alloc(ms, &reply->m, encoded);
+               cd = (fr_channel_data_t *) fr_message_alloc(ms, &reply->m, slen);
                rad_assert(cd == reply);
        }