Do not sort empty records to avoid calling qsort(3) with a NULL pointer. qsort(3) might be annotated with the function attribute nonnull and UBSan then complains: database_join.c:80:2: runtime error: null pointer passed as argument 1, which is declared to never be null Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx> --- libsemanage/src/database_join.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libsemanage/src/database_join.c b/libsemanage/src/database_join.c index b9b35a61..b0e66e53 100644 --- a/libsemanage/src/database_join.c +++ b/libsemanage/src/database_join.c @@ -77,10 +77,12 @@ static int dbase_join_cache(semanage_handle_t * handle, dbase_join_t * dbase) goto err; /* Sort for quicker merge later */ - qsort(records1, rcount1, sizeof(record1_t *), - (int (*)(const void *, const void *))rtable1->compare2_qsort); - qsort(records2, rcount2, sizeof(record2_t *), - (int (*)(const void *, const void *))rtable2->compare2_qsort); + if (rcount1 > 0) + qsort(records1, rcount1, sizeof(record1_t *), + (int (*)(const void *, const void *))rtable1->compare2_qsort); + if (rcount2 > 0) + qsort(records2, rcount2, sizeof(record2_t *), + (int (*)(const void *, const void *))rtable2->compare2_qsort); /* Now merge into this dbase */ while (i < rcount1 || j < rcount2) { -- 2.33.0