On (14/10/14 14:40), Jakub Hrozek wrote:
On Mon, Oct 13, 2014 at 09:51:17AM +0200, Lukas Slebodnik wrote:
From fac3031392c09ab1827e28311eaa0addbfb5fc46 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik lslebodn@redhat.com Date: Fri, 10 Oct 2014 19:23:33 +0200 Subject: [PATCH] SBUS: Fir error handling after closing container
If function dbus_message_iter_close_container fail the return variable ret will be set to EINVAL, but function will not be immediately terminated. "goto done" was missing.
src/sbus/sssd_dbus_request.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/src/sbus/sssd_dbus_request.c b/src/sbus/sssd_dbus_request.c index 7729d4e0d7bf6e517e2efce4dbeb064f6f471b87..677ed532f7555f6aeba378ebd9a0b06167ddfa1b 100644 --- a/src/sbus/sssd_dbus_request.c +++ b/src/sbus/sssd_dbus_request.c @@ -286,6 +286,7 @@ int sbus_request_return_array_as_variant(struct sbus_request *dbus_req, DBUS_ERROR_FAILED, "Could not close array\n")); ret = EINVAL;
goto done;
}
dbret = dbus_message_iter_close_container(&iter, &variant_iter);
@@ -298,6 +299,7 @@ int sbus_request_return_array_as_variant(struct sbus_request *dbus_req, DBUS_ERROR_FAILED, "Could not close variant\n")); ret = EINVAL;
}goto done;
Can you also add ret=EOK before the done label?
It would override return value from function sbus_request_finish.
292 dbret = dbus_message_iter_close_container(&iter, &variant_iter); 293 if (dbret) { 294 ret = sbus_request_finish(dbus_req, reply); 295 } else { 296 sbus_request_fail_and_finish( 297 dbus_req, 298 sbus_error_new(dbus_req, 299 DBUS_ERROR_FAILED, 300 "Could not close variant\n")); 301 ret = EINVAL; 302 goto done; 303 } 304 305 done: 306 if (reply != NULL) { 307 dbus_message_unref(reply); 308 }
LS