From 314dd3cd55cff2b663fb063b7c01db01ba7d05b4 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 3 Sep 2023 05:54:22 +0300 Subject: [PATCH 2/2] Fix zero-size VLA error in barycentric_sort() See osdn #48570 Signed-off-by: Marko Lindqvist --- client/reqtree.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/client/reqtree.c b/client/reqtree.c index 7e1156904e..a11cb67331 100644 --- a/client/reqtree.c +++ b/client/reqtree.c @@ -707,38 +707,40 @@ static int cmp_func(const void *_a, const void *_b) /*********************************************************************//** Simple heuristic: Sort nodes on the given layer by the average x-value - of its' parents. + of its parents. *************************************************************************/ static void barycentric_sort(struct reqtree *tree, int layer) { - struct node_and_float T[tree->layer_size[layer]]; - int i, j; - float v; + if (tree->layer_size[layer] > 0) { + struct node_and_float T[tree->layer_size[layer]]; + int i, j; + float v; - for (i = 0; i < tree->layer_size[layer]; i++) { - struct tree_node *node = tree->layers[layer][i]; + for (i = 0; i < tree->layer_size[layer]; i++) { + struct tree_node *node = tree->layers[layer][i]; - T[i].node = node; - v = 0.0; - for (j = 0; j < node->nrequire; j++) { - v += node->require[j]->order; - } - if (node->nrequire > 0) { - v /= (float) node->nrequire; + T[i].node = node; + v = 0.0; + for (j = 0; j < node->nrequire; j++) { + v += node->require[j]->order; + } + if (node->nrequire > 0) { + v /= (float) node->nrequire; + } + T[i].value = v; } - T[i].value = v; - } - qsort(T, tree->layer_size[layer], sizeof(*T), - cmp_func); + qsort(T, tree->layer_size[layer], sizeof(*T), + cmp_func); - for (i = 0; i < tree->layer_size[layer]; i++) { - tree->layers[layer][i] = T[i].node; - T[i].node->order = i; + for (i = 0; i < tree->layer_size[layer]; i++) { + tree->layers[layer][i] = T[i].node; + T[i].node->order = i; + } } } /*********************************************************************//** - Calculate number of edge crossings between layer and layer+1 + Calculate number of edge crossings between layer and layer + 1 *************************************************************************/ static int count_crossings(struct reqtree *tree, int layer) { -- 2.40.1