]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-varlink: if we reply to errors without passing to callback, go through regular...
authorLennart Poettering <lennart@poettering.net>
Wed, 30 Oct 2024 14:19:12 +0000 (15:19 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 31 Oct 2024 00:50:50 +0000 (09:50 +0900)
If replying with an error fails, we should failt the whole connection,
and not leave the connection in a weird state.

src/libsystemd/sd-varlink/sd-varlink.c

index fb42e3205da3861ae963af3276449e51034482c6..af3a3073543294260c83c4c039e46888bcf0a39d 100644 (file)
@@ -1362,7 +1362,7 @@ static int varlink_dispatch_method(sd_varlink *v) {
                                 if (v->state == VARLINK_PROCESSING_METHOD) {
                                         r = sd_varlink_error(v, SD_VARLINK_ERROR_EXPECTED_MORE, NULL);
                                         if (r < 0)
-                                                return r;
+                                                goto fail;
                                 }
                         } else if (r < 0) {
                                 /* Please adjust test/units/end.sh when updating the log message. */
@@ -1372,7 +1372,7 @@ static int varlink_dispatch_method(sd_varlink *v) {
                                 if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                                         r = sd_varlink_error_invalid_parameter_name(v, bad_field);
                                         if (r < 0)
-                                                return r;
+                                                goto fail;
                                 }
                         }
 
@@ -1388,14 +1388,14 @@ static int varlink_dispatch_method(sd_varlink *v) {
                                 if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                                         r = sd_varlink_error_errno(v, r);
                                         if (r < 0)
-                                                return r;
+                                                goto fail;
                                 }
                         }
                 }
         } else if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                 r = sd_varlink_errorbo(v, SD_VARLINK_ERROR_METHOD_NOT_FOUND, SD_JSON_BUILD_PAIR("method", SD_JSON_BUILD_STRING(method)));
                 if (r < 0)
-                        return r;
+                        goto fail;
         }
 
         switch (v->state) {