Fix possible UB in ArrayRef construction
authorPaul Bauer <paul.bauer.q@gmail.com>
Tue, 20 Apr 2021 07:53:33 +0000 (09:53 +0200)
committerPaul Bauer <paul.bauer.q@gmail.com>
Tue, 20 Apr 2021 11:46:29 +0000 (11:46 +0000)
The code could cause possible UB when construction ArrayRefs from
nullptrs.

Added nullptr check to only construct empty ArrayRef in that case.

src/gromacs/domdec/partition.cpp

index 6cd38c9f0161ca1306e8ddc9fe81e7800b82e512..e9adda3092c48195eaa987370e04d755e8a949a7 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "gmxpre.h"
 
+#include "gromacs/utility/arrayref.h"
 #include "partition.h"
 
 #include "config.h"
@@ -3289,11 +3290,14 @@ void dd_partition_system(FILE*                     fplog,
                                 mdatoms->nChargePerturbed != 0,
                                 mdatoms->nTypePerturbed != 0,
                                 gmx::arrayRefFromArray(mdatoms->chargeA, mdatoms->nr),
-                                gmx::arrayRefFromArray(mdatoms->chargeB, mdatoms->nr),
+                                mdatoms->chargeB ? gmx::arrayRefFromArray(mdatoms->chargeB, mdatoms->nr)
+                                                 : gmx::ArrayRef<real>{},
                                 gmx::arrayRefFromArray(mdatoms->sqrt_c6A, mdatoms->nr),
-                                gmx::arrayRefFromArray(mdatoms->sqrt_c6B, mdatoms->nr),
+                                mdatoms->sqrt_c6B ? gmx::arrayRefFromArray(mdatoms->sqrt_c6B, mdatoms->nr)
+                                                  : gmx::ArrayRef<real>{},
                                 gmx::arrayRefFromArray(mdatoms->sigmaA, mdatoms->nr),
-                                gmx::arrayRefFromArray(mdatoms->sigmaB, mdatoms->nr),
+                                mdatoms->sigmaB ? gmx::arrayRefFromArray(mdatoms->sigmaB, mdatoms->nr)
+                                                : gmx::ArrayRef<real>{},
                                 dd_pme_maxshift_x(*dd),
                                 dd_pme_maxshift_y(*dd));
     }