]> xenbits.xensource.com Git - libvirt.git/commitdiff
virJSONValueObjectAppend: Clear pointer when taking ownership of passed value
authorPeter Krempa <pkrempa@redhat.com>
Thu, 11 Feb 2021 16:57:45 +0000 (17:57 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Sat, 20 Feb 2021 12:26:37 +0000 (13:26 +0100)
The parent object takes ownership of the inserted value once all checks
pass. Don't make the callers second-guess when that happens and modify
the function to take a double pointer so that it can be cleared once the
ownership is taken.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
16 files changed:
src/locking/lock_daemon.c
src/logging/log_daemon.c
src/logging/log_handler.c
src/node_device/node_device_driver.c
src/qemu/qemu_block.c
src/qemu/qemu_firmware.c
src/qemu/qemu_migration_params.c
src/qemu/qemu_monitor_json.c
src/rpc/virnetdaemon.c
src/rpc/virnetserver.c
src/rpc/virnetserverclient.c
src/rpc/virnetserverservice.c
src/util/virjson.c
src/util/virjson.h
src/util/virlockspace.c
src/util/virmacmap.c

index 5913c0cb9c540de0618961fc90f1863d2e7f135f..26905a462b0ea8c1d5e96f5b570765061a1caca3 100644 (file)
@@ -711,16 +711,14 @@ virLockDaemonPreExecRestart(const char *state_file,
     if (!(daemon = virNetDaemonPreExecRestart(dmn)))
         return -1;
 
-    if (virJSONValueObjectAppend(object, "daemon", daemon) < 0)
+    if (virJSONValueObjectAppend(object, "daemon", &daemon) < 0)
         return -1;
-    daemon = NULL;
 
     if (!(defaultLockspace = virLockSpacePreExecRestart(lockDaemon->defaultLockspace)))
         return -1;
 
-    if (virJSONValueObjectAppend(object, "defaultLockspace", defaultLockspace) < 0)
+    if (virJSONValueObjectAppend(object, "defaultLockspace", &defaultLockspace) < 0)
         return -1;
-    defaultLockspace = NULL;
 
     tmp = pairs = virHashGetItems(lockDaemon->lockspaces, NULL, false);
     while (tmp && tmp->key) {
@@ -737,9 +735,8 @@ virLockDaemonPreExecRestart(const char *state_file,
         tmp++;
     }
 
-    if (virJSONValueObjectAppend(object, "lockspaces", lockspaces) < 0)
+    if (virJSONValueObjectAppend(object, "lockspaces", &lockspaces) < 0)
         return -1;
-    lockspaces = NULL;
 
     if (!(magic = virLockDaemonGetExecRestartMagic()))
         return -1;
index ceffa6a3689a3a47e5b1458b26a024e883095513..cc0b96ea0512925d9b0ebbaf41d682b2e060a39f 100644 (file)
@@ -516,9 +516,8 @@ virLogDaemonPreExecRestart(const char *state_file,
     if (!(daemon = virNetDaemonPreExecRestart(dmn)))
         return -1;
 
-    if (virJSONValueObjectAppend(object, "daemon", daemon) < 0)
+    if (virJSONValueObjectAppend(object, "daemon", &daemon) < 0)
         return -1;
-    daemon = NULL;
 
     if (!(magic = virLogDaemonGetExecRestartMagic()))
         return -1;
@@ -529,9 +528,8 @@ virLogDaemonPreExecRestart(const char *state_file,
     if (!(handler = virLogHandlerPreExecRestart(logDaemon->handler)))
         return -1;
 
-    if (virJSONValueObjectAppend(object, "handler", handler) < 0)
+    if (virJSONValueObjectAppend(object, "handler", &handler) < 0)
         return -1;
-    handler = NULL;
 
     if (!(state = virJSONValueToString(object, true)))
         return -1;
index cacf9584cdfd9529f2cef0e655e679c6489276de..d649c4d132aa955d3c211452133c0b32bbc081bd 100644 (file)
@@ -647,9 +647,8 @@ virLogHandlerPreExecRestart(virLogHandlerPtr handler)
         file = NULL;
     }
 
-    if (virJSONValueObjectAppend(ret, "files", files) < 0)
+    if (virJSONValueObjectAppend(ret, "files", &files) < 0)
         return NULL;
-    files = NULL;
 
     return g_steal_pointer(&ret);
 }
index 51b20848ce87fa8de26d68db11b56f20a82749e3..d946e64ad6a0457b9ac60adf844e59e58d3c3d5b 100644 (file)
@@ -610,7 +610,7 @@ nodeDeviceDefToMdevctlConfig(virNodeDeviceDefPtr def, char **buf)
                 return -1;
         }
 
-        if (virJSONValueObjectAppend(json, "attrs", g_steal_pointer(&attributes)) < 0)
+        if (virJSONValueObjectAppend(json, "attrs", &attributes) < 0)
             return -1;
     }
 
index 0af3e56c9a7d91c4184d80a6b027f8de50c6f65d..3262d2bfa903cec0c2ff4dfaa4476880eafc6559 100644 (file)
@@ -1092,9 +1092,8 @@ qemuBlockStorageSourceGetBlockdevGetCacheProps(virStorageSourcePtr src,
                                  NULL) < 0)
         return -1;
 
-    if (virJSONValueObjectAppend(props, "cache", cacheobj) < 0)
+    if (virJSONValueObjectAppend(props, "cache", &cacheobj) < 0)
         return -1;
-    cacheobj = NULL;
 
     return 0;
 }
index c571fdecf71345058bc8b017c307c35fe5e60813..5e8fdd0ff15097fe501abb832cb4a3fffece8032 100644 (file)
@@ -662,10 +662,9 @@ qemuFirmwareInterfaceFormat(virJSONValuePtr doc,
 
     if (virJSONValueObjectAppend(doc,
                                  "interface-types",
-                                 interfacesJSON) < 0)
+                                 &interfacesJSON) < 0)
         return -1;
 
-    interfacesJSON = NULL;
     return 0;
 }
 
@@ -706,18 +705,15 @@ qemuFirmwareMappingFlashFormat(virJSONValuePtr mapping,
 
     if (virJSONValueObjectAppend(mapping,
                                  "executable",
-                                 executable) < 0)
+                                 &executable) < 0)
         return -1;
 
-    executable = NULL;
 
     if (virJSONValueObjectAppend(mapping,
                                  "nvram-template",
-                                 nvram_template) < 0)
+                                 &nvram_template) < 0)
         return -1;
 
-    nvram_template = NULL;
-
     return 0;
 }
 
@@ -778,10 +774,9 @@ qemuFirmwareMappingFormat(virJSONValuePtr doc,
         break;
     }
 
-    if (virJSONValueObjectAppend(doc, "mapping", mapping) < 0)
+    if (virJSONValueObjectAppend(doc, "mapping", &mapping) < 0)
         return -1;
 
-    mapping = NULL;
     return 0;
 }
 
@@ -814,21 +809,18 @@ qemuFirmwareTargetFormat(virJSONValuePtr doc,
                 return -1;
         }
 
-        if (virJSONValueObjectAppend(target, "machines", machines) < 0)
+        if (virJSONValueObjectAppend(target, "machines", &machines) < 0)
             return -1;
 
-        machines = NULL;
-
         if (virJSONValueArrayAppend(targetsJSON, target) < 0)
             return -1;
 
         target = NULL;
     }
 
-    if (virJSONValueObjectAppend(doc, "targets", targetsJSON) < 0)
+    if (virJSONValueObjectAppend(doc, "targets", &targetsJSON) < 0)
         return -1;
 
-    targetsJSON = NULL;
     return 0;
 }
 
@@ -850,10 +842,9 @@ qemuFirmwareFeatureFormat(virJSONValuePtr doc,
 
     if (virJSONValueObjectAppend(doc,
                                  "features",
-                                 featuresJSON) < 0)
+                                 &featuresJSON) < 0)
         return -1;
 
-    featuresJSON = NULL;
     return 0;
 }
 
index e9b4601510078bb20105fbb6e44bef9139cdcae5..8197450456689e90e6b062084ed2a59f4866aa1b 100644 (file)
@@ -770,9 +770,8 @@ qemuMigrationParamsToJSON(qemuMigrationParamsPtr migParams)
         if (!mapping)
             return NULL;
 
-        if (virJSONValueObjectAppend(params, "block-bitmap-mapping", mapping) < 0)
+        if (virJSONValueObjectAppend(params, "block-bitmap-mapping", &mapping) < 0)
             return NULL;
-        mapping = NULL;
     }
 
     return g_steal_pointer(&params);
index 03224d4af2dbc5dd2a0ea9baf3f158cbec1acd7e..9aaa730b72d56c1a10aee437061217e07a3bacf2 100644 (file)
@@ -4565,9 +4565,8 @@ qemuMonitorJSONAddDeviceArgs(qemuMonitorPtr mon,
     if (!(cmd = qemuMonitorJSONMakeCommand("device_add", NULL)))
         goto cleanup;
 
-    if (virJSONValueObjectAppend(cmd, "arguments", args) < 0)
+    if (virJSONValueObjectAppend(cmd, "arguments", &args) < 0)
         goto cleanup;
-    args = NULL; /* obj owns reference to args now */
 
     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
         goto cleanup;
@@ -5583,9 +5582,8 @@ int qemuMonitorJSONSetBlockIoThrottle(qemuMonitorPtr mon,
                               NULL) < 0)
         goto cleanup;
 
-    if (virJSONValueObjectAppend(cmd, "arguments", args) < 0)
+    if (virJSONValueObjectAppend(cmd, "arguments", &args) < 0)
         goto cleanup;
-    args = NULL; /* obj owns reference to args now */
 
     if (qemuMonitorJSONCommand(mon, cmd, &result) < 0)
         goto cleanup;
@@ -6000,7 +5998,7 @@ qemuMonitorJSONMakeCPUModel(virCPUDefPtr cpu,
             goto error;
         }
 
-        if (virJSONValueObjectAppend(model, "props", props) < 0)
+        if (virJSONValueObjectAppend(model, "props", &props) < 0)
             goto error;
     }
 
@@ -7481,9 +7479,8 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID,
         addr = qemuMonitorJSONBuildInetSocketAddress(chr->data.tcp.host,
                                                      chr->data.tcp.service);
         if (!addr ||
-            virJSONValueObjectAppend(data, "addr", addr) < 0)
+            virJSONValueObjectAppend(data, "addr", &addr) < 0)
             goto cleanup;
-        addr = NULL;
 
         telnet = chr->data.tcp.protocol == VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET;
 
@@ -7514,7 +7511,7 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID,
         addr = qemuMonitorJSONBuildInetSocketAddress(host,
                                                      chr->data.udp.connectService);
         if (!addr ||
-            virJSONValueObjectAppend(data, "remote", addr) < 0)
+            virJSONValueObjectAppend(data, "remote", &addr) < 0)
             goto cleanup;
 
         host = chr->data.udp.bindHost;
@@ -7526,10 +7523,9 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID,
                 port = "";
             addr = qemuMonitorJSONBuildInetSocketAddress(host, port);
             if (!addr ||
-                virJSONValueObjectAppend(data, "local", addr) < 0)
+                virJSONValueObjectAppend(data, "local", &addr) < 0)
                 goto cleanup;
         }
-        addr = NULL;
         break;
 
     case VIR_DOMAIN_CHR_TYPE_UNIX:
@@ -7537,9 +7533,8 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID,
         addr = qemuMonitorJSONBuildUnixSocketAddress(chr->data.nix.path);
 
         if (!addr ||
-            virJSONValueObjectAppend(data, "addr", addr) < 0)
+            virJSONValueObjectAppend(data, "addr", &addr) < 0)
             goto cleanup;
-        addr = NULL;
 
         if (chr->data.nix.listen &&
             virJSONValueObjectAppendBoolean(data, "wait", false) < 0)
@@ -7585,9 +7580,8 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID,
         goto cleanup;
 
     if (virJSONValueObjectAppendString(backend, "type", backend_type) < 0 ||
-        virJSONValueObjectAppend(backend, "data", data) < 0)
+        virJSONValueObjectAppend(backend, "data", &data) < 0)
         goto cleanup;
-    data = NULL;
 
     if (!(ret = qemuMonitorJSONMakeCommand("chardev-add",
                                            "s:id", chrID,
index 613261509335fd22e2758a9a235178fa6715343c..327540c4b4c9a92932155007b4793a411913bf3b 100644 (file)
@@ -404,16 +404,14 @@ virNetDaemonPreExecRestart(virNetDaemonPtr dmn)
         if (!srvJSON)
             goto error;
 
-        if (virJSONValueObjectAppend(srvObj, srvArray[i].key, srvJSON) < 0)
+        if (virJSONValueObjectAppend(srvObj, srvArray[i].key, &srvJSON) < 0)
             goto error;
-        srvJSON = NULL;
     }
 
     virObjectUnlock(dmn);
 
-    if (virJSONValueObjectAppend(object, "servers", srvObj) < 0)
+    if (virJSONValueObjectAppend(object, "servers", &srvObj) < 0)
         return NULL;
-    srvObj = NULL;
 
     return g_steal_pointer(&object);
 
index ee402e8ea0ce4ba31199e757877c0a47b6a1ac74..c2650ade09f999a4a642a7821046bcd1f70680aa 100644 (file)
@@ -590,9 +590,8 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
         child = NULL;
     }
 
-    if (virJSONValueObjectAppend(object, "services", services) < 0)
+    if (virJSONValueObjectAppend(object, "services", &services) < 0)
         goto error;
-    services = NULL;
 
     for (i = 0; i < srv->nclients; i++) {
         g_autoptr(virJSONValue) child = NULL;
@@ -604,9 +603,8 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
         child = NULL;
     }
 
-    if (virJSONValueObjectAppend(object, "clients", clients) < 0)
+    if (virJSONValueObjectAppend(object, "clients", &clients) < 0)
         goto error;
-    clients = NULL;
 
     virObjectUnlock(srv);
 
index 0789ad9154cf26c79e888b6358b1698b753f1e2c..2bb3443287c60968d8de658dc41732659ac924e0 100644 (file)
@@ -610,16 +610,14 @@ virJSONValuePtr virNetServerClientPreExecRestart(virNetServerClientPtr client)
     if (!(sock = virNetSocketPreExecRestart(client->sock)))
         goto error;
 
-    if (virJSONValueObjectAppend(object, "sock", sock) < 0)
+    if (virJSONValueObjectAppend(object, "sock", &sock) < 0)
         goto error;
-    sock = NULL;
 
     if (!(priv = client->privateDataPreExecRestart(client, client->privateData)))
         goto error;
 
-    if (virJSONValueObjectAppend(object, "privateData", priv) < 0)
+    if (virJSONValueObjectAppend(object, "privateData", &priv) < 0)
         goto error;
-    priv = NULL;
 
     virObjectUnlock(client);
     return g_steal_pointer(&object);
index a72277226adc411426a282860990e47ef49ca5b5..fece6305e87e57c068c5cebd9965be8ae353894d 100644 (file)
@@ -357,9 +357,8 @@ virJSONValuePtr virNetServerServicePreExecRestart(virNetServerServicePtr svc)
         child = NULL;
     }
 
-    if (virJSONValueObjectAppend(object, "socks", socks) < 0)
+    if (virJSONValueObjectAppend(object, "socks", &socks) < 0)
         return NULL;
-    socks = NULL;
 
     return g_steal_pointer(&object);
 }
index 7b52525797c6c86a894df1c1213c1e7ed7cb25e9..5b3aa49a7f7dc8b7ae73267c99da5c38b2ad0501 100644 (file)
@@ -298,7 +298,7 @@ virJSONValueObjectAddVArgs(virJSONValuePtr obj,
                 return -1;
             }
 
-            if ((rc = virJSONValueObjectAppend(obj, key, *val)) == 0)
+            if ((rc = virJSONValueObjectAppend(obj, key, val)) == 0)
                 *val = NULL;
         }   break;
 
@@ -320,9 +320,8 @@ virJSONValueObjectAddVArgs(virJSONValuePtr obj,
             if (!(jsonMap = virJSONValueNewArrayFromBitmap(map)))
                 return -1;
 
-            if ((rc = virJSONValueObjectAppend(obj, key, jsonMap)) < 0)
+            if ((rc = virJSONValueObjectAppend(obj, key, &jsonMap)) < 0)
                 return -1;
-            jsonMap = NULL;
         } break;
 
         default:
@@ -616,9 +615,9 @@ virJSONValueObjectInsert(virJSONValuePtr object,
 int
 virJSONValueObjectAppend(virJSONValuePtr object,
                          const char *key,
-                         virJSONValuePtr value)
+                         virJSONValuePtr *value)
 {
-    return virJSONValueObjectInsert(object, key, &value, false);
+    return virJSONValueObjectInsert(object, key, value, false);
 }
 
 
@@ -679,9 +678,8 @@ virJSONValueObjectAppendNumberInt(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewNumberInt(number);
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -694,9 +692,8 @@ virJSONValueObjectAppendNumberUint(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewNumberUint(number);
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -709,9 +706,8 @@ virJSONValueObjectAppendNumberLong(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewNumberLong(number);
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -724,9 +720,8 @@ virJSONValueObjectAppendNumberUlong(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewNumberUlong(number);
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -743,9 +738,8 @@ virJSONValueObjectAppendNumberDouble(virJSONValuePtr object,
     if (!jvalue)
         return -1;
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -758,9 +752,8 @@ virJSONValueObjectAppendBoolean(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewBoolean(boolean_);
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -772,9 +765,8 @@ virJSONValueObjectAppendNull(virJSONValuePtr object,
 {
     g_autoptr(virJSONValue) jvalue = virJSONValueNewNull();
 
-    if (virJSONValueObjectAppend(object, key, jvalue) < 0)
+    if (virJSONValueObjectAppend(object, key, &jvalue) < 0)
         return -1;
-    jvalue = NULL;
 
     return 0;
 }
@@ -1583,7 +1575,7 @@ virJSONParserInsertValue(virJSONParserPtr parser,
 
             if (virJSONValueObjectAppend(state->value,
                                          state->key,
-                                         value) < 0)
+                                         &value) < 0)
                 return -1;
 
             VIR_FREE(state->key);
@@ -2093,7 +2085,7 @@ virJSONValueObjectDeflattenWorker(const char *key,
             return -1;
         }
 
-        if (virJSONValueObjectAppend(retobj, key, newval) < 0)
+        if (virJSONValueObjectAppend(retobj, key, &newval) < 0)
             return -1;
 
         newval = NULL;
@@ -2111,9 +2103,10 @@ virJSONValueObjectDeflattenWorker(const char *key,
     }
 
     if (!(existobj = virJSONValueObjectGet(retobj, tokens[0]))) {
-        existobj = virJSONValueNewObject();
+        virJSONValuePtr newobj = virJSONValueNewObject();
+        existobj = newobj;
 
-        if (virJSONValueObjectAppend(retobj, tokens[0], existobj) < 0)
+        if (virJSONValueObjectAppend(retobj, tokens[0], &newobj) < 0)
             return -1;
 
     } else {
index 4dc7ed1a2d52045eb17bb771a8f1d0c27df56a6a..ca99ae3b70fbd89f125fe92fe8c69f5ef246f6a3 100644 (file)
@@ -69,7 +69,9 @@ virJSONValuePtr virJSONValueNewArray(void);
 virJSONValuePtr virJSONValueNewObject(void);
 virJSONValuePtr virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap);
 
-int virJSONValueObjectAppend(virJSONValuePtr object, const char *key, virJSONValuePtr value);
+int virJSONValueObjectAppend(virJSONValuePtr object,
+                             const char *key,
+                             virJSONValuePtr *value);
 int virJSONValueArrayAppend(virJSONValuePtr object, virJSONValuePtr value);
 int virJSONValueArrayConcat(virJSONValuePtr a,
                             virJSONValuePtr c);
index 1b6b51b649841aa30848ec94c713ca2d14ef3a50..9ba6e83251d54d40a7a3f137e97ea30587bc9645 100644 (file)
@@ -460,9 +460,8 @@ virJSONValuePtr virLockSpacePreExecRestart(virLockSpacePtr lockspace)
             owner = NULL;
         }
 
-        if (virJSONValueObjectAppend(child, "owners", owners) < 0)
+        if (virJSONValueObjectAppend(child, "owners", &owners) < 0)
             goto error;
-        owners = NULL;
 
         if (virJSONValueArrayAppend(resources, child) < 0)
             goto error;
@@ -471,9 +470,8 @@ virJSONValuePtr virLockSpacePreExecRestart(virLockSpacePtr lockspace)
         tmp++;
     }
 
-    if (virJSONValueObjectAppend(object, "resources", resources) < 0)
+    if (virJSONValueObjectAppend(object, "resources", &resources) < 0)
         goto error;
-    resources = NULL;
 
     virMutexUnlock(&lockspace->lock);
     return object;
index 0d458d7b7b0e691ae2d7432a8b5300806941cac7..521ab89b5bd0c314e60d23753134871c1bad74b1 100644 (file)
@@ -224,9 +224,8 @@ virMACMapHashDumper(void *payload,
     }
 
     if (virJSONValueObjectAppendString(obj, "domain", name) < 0 ||
-        virJSONValueObjectAppend(obj, "macs", arr) < 0)
+        virJSONValueObjectAppend(obj, "macs", &arr) < 0)
         return -1;
-    arr = NULL;
 
     if (virJSONValueArrayAppend(data, obj) < 0)
         return -1;