]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
OSPF: variable-length array of size 0 replaced by alloca()'d pointer
authorMaria Matejka <mq@ucw.cz>
Fri, 16 Aug 2019 10:47:13 +0000 (12:47 +0200)
committerMaria Matejka <mq@ucw.cz>
Fri, 1 May 2020 13:19:12 +0000 (15:19 +0200)
NULL pointer is safer than a random pointer onto stack if this function
gets changed and eventually broken.

proto/ospf/ospf.c

index 29610f4ac042397ab8b93a9293bf1eaceb7572d9..3cb40283426aa4de740ceba27ccb113d3fc5b766 100644 (file)
@@ -1244,7 +1244,7 @@ ospf_sh_state(struct proto *P, int verbose, int reachable)
 
   uint num = p->gr->hash_entries;
   struct top_hash_entry *hea[num];
-  struct top_hash_entry *hex[verbose ? num : 0];
+  struct top_hash_entry **hex = verbose ? alloca(num * sizeof(struct top_hash_entry *)) : NULL;
   struct top_hash_entry *he;
   struct top_hash_entry *cnode = NULL;
 
@@ -1289,7 +1289,9 @@ ospf_sh_state(struct proto *P, int verbose, int reachable)
 
   lsa_compare_ospf3 = !ospf2;
   qsort(hea, j1, sizeof(struct top_hash_entry *), lsa_compare_for_state);
-  qsort(hex, jx, sizeof(struct top_hash_entry *), ext_compare_for_state);
+
+  if (verbose)
+    qsort(hex, jx, sizeof(struct top_hash_entry *), ext_compare_for_state);
 
   /*
    * This code is a bit tricky, we have a primary LSAs (router and