]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: fix oper-state memleak
authorChristian Hopps <chopps@labn.net>
Tue, 9 Jan 2024 21:52:41 +0000 (21:52 +0000)
committerChristian Hopps <chopps@labn.net>
Tue, 9 Jan 2024 21:52:41 +0000 (21:52 +0000)
Fix memleak when a key-ed query was done for which the key didn't exist.

Signed-off-by: Christian Hopps <chopps@labn.net>
lib/northbound_oper.c
tests/topotests/mgmt_oper/test_simple.py

index 334370d0aba0ec14d52b7ae933f4fc86e3e9e1fa..27e37abd04f25d3887b3e368059d006159d3a76e 100644 (file)
@@ -477,7 +477,7 @@ static enum nb_error nb_op_ys_init_node_infos(struct nb_op_yield_state *ys)
 {
        struct nb_op_node_info *ni;
        struct lyd_node_inner *inner;
-       struct lyd_node *node;
+       struct lyd_node *node = NULL;
        enum nb_error ret;
        uint i, len;
        char *tmp;
@@ -547,6 +547,8 @@ static enum nb_error nb_op_ys_init_node_infos(struct nb_op_yield_state *ys)
        darr_foreach_i (ys->node_infos, i) {
                ret = nb_op_ys_finalize_node_info(ys, i);
                if (ret != NB_OK) {
+                       if (ys->node_infos[0].inner)
+                               lyd_free_all(&ys->node_infos[0].inner->node);
                        darr_free(ys->node_infos);
                        return ret;
                }
index 1f9f21b8defba3af75d0c243f55426e442bb17bc..e731e4bcc447c8eb285d312032648766aa1856cb 100644 (file)
@@ -92,18 +92,18 @@ def test_oper_simple(tgen):
             'rib[afi-safi-name="frr-routing:ipv4-unicast"][table-id="254"]/route',
             "simple-results/result-ribs-rib-route-nokey.json",
         ),
-        # Missing entry
         (
             '/frr-vrf:lib/vrf[name="default"]/frr-zebra:zebra/ribs/'
             'rib[afi-safi-name="frr-routing:ipv4-unicast"][table-id="254"]/'
-            'route[prefix="1.1.0.0/24"]',
-            "simple-results/result-empty.json",
+            'route[prefix="1.1.1.0/24"]',
+            "simple-results/result-ribs-rib-route-prefix.json",
         ),
+        # Missing entry
         (
             '/frr-vrf:lib/vrf[name="default"]/frr-zebra:zebra/ribs/'
             'rib[afi-safi-name="frr-routing:ipv4-unicast"][table-id="254"]/'
-            'route[prefix="1.1.1.0/24"]',
-            "simple-results/result-ribs-rib-route-prefix.json",
+            'route[prefix="1.1.0.0/24"]',
+            "simple-results/result-empty.json",
         ),
         # Leaf reference
         (