diff
11   for (i = 3; i < size / 2; i *= 2) {
12 +     size_t copy_size = (i + i <= size) ? i : size - i;
12 -     memcpy(r + i, r, i);
12 +     memcpy(r + i, r, copy_size);
13   }
