From 940a7fbed4efd67fed3be4283b87d83c3e087643 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 26 Feb 2009 23:47:00 +0000 Subject: [PATCH] In genfry (general array-scrambling function), don't swap an array element with itself. memcpy is undefined when the source and destination overlap. Thanks to Brandon for uncovering this. --- utils.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/utils.cc b/utils.cc index f77892cab..c902b43e6 100644 --- a/utils.cc +++ b/utils.cc @@ -317,9 +317,11 @@ iptr = (unsigned int *) bytes; pos = *iptr; iptr++; } pos %= i+1; - memcpy(tmp, arr + elem_sz * i, elem_sz); - memcpy(arr + elem_sz * i, arr + elem_sz * pos, elem_sz); - memcpy(arr + elem_sz * pos, tmp, elem_sz); + if ((unsigned) i != pos) { /* memcpy is undefined when source and dest overlap. */ + memcpy(tmp, arr + elem_sz * i, elem_sz); + memcpy(arr + elem_sz * i, arr + elem_sz * pos, elem_sz); + memcpy(arr + elem_sz * pos, tmp, elem_sz); + } } free(bytes); free(tmp);