]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/iovec-wrapper: fix potential memleak on error
authorZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Fri, 17 Apr 2026 10:19:40 +0000 (12:19 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Fri, 17 Apr 2026 10:19:40 +0000 (12:19 +0200)
Also reorder the functions in the call stack order.

src/basic/iovec-wrapper.c
src/basic/iovec-wrapper.h

index 408985763eaeba33f2c2aa0edc571c5c0936574b..bd4b9a1040243cf2c2532fd5b69e5d4840583cc4 100644 (file)
@@ -41,17 +41,6 @@ int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len) {
         return 0;
 }
 
-int iovw_append(struct iovec_wrapper *iovw, const void *data, size_t len) {
-        if (len == 0)
-                return 0;
-
-        void *c = memdup(data, len);
-        if (!c)
-                return -ENOMEM;
-
-        return iovw_put(iovw, c, len);
-}
-
 int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len) {
         /* Move data into iovw or free on error */
         int r;
@@ -63,6 +52,17 @@ int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len) {
         return r;
 }
 
+int iovw_append(struct iovec_wrapper *iovw, const void *data, size_t len) {
+        if (len == 0)
+                return 0;
+
+        void *c = memdup(data, len);
+        if (!c)
+                return -ENOMEM;
+
+        return iovw_consume(iovw, c, len);
+}
+
 int iovw_put_string_field_full(struct iovec_wrapper *iovw, bool replace, const char *field, const char *value) {
         _cleanup_free_ char *x = NULL;
         int r;
index 6f0c9af43c9b50499b30487da284dd7981280dcd..eaa859af06d4a33044f427af300fe0e5c4cd8547 100644 (file)
@@ -12,8 +12,8 @@ void iovw_done_free(struct iovec_wrapper *iovw);
 void iovw_done(struct iovec_wrapper *iovw);
 
 int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len);
-int iovw_append(struct iovec_wrapper *iovw, const void *data, size_t len);
 int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len);
+int iovw_append(struct iovec_wrapper *iovw, const void *data, size_t len);
 
 static inline bool iovw_isempty(const struct iovec_wrapper *iovw) {
         return !iovw || iovw->count == 0;