Latest Intel compiler means every word in "if copying [with memcpy] takes
authorAndy Polyakov <appro@openssl.org>
Fri, 8 Jul 2005 16:46:22 +0000 (16:46 +0000)
committerAndy Polyakov <appro@openssl.org>
Fri, 8 Jul 2005 16:46:22 +0000 (16:46 +0000)
place between objects that overlap, the behavior is undefined." It's hard
to comprehend, but it reportedly manages to be case.

crypto/des/cfb_enc.c

index 6738e7c0e5a1af9e1167bc8a5e86a9dfe418a061..720f29a28e625a3b11623099e3405828d1dbc4e9 100644 (file)
@@ -125,7 +125,7 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
                                sh[0]=v0, sh[1]=v1, sh[2]=d0, sh[3]=d1;
 #endif
                                if (rem==0)
-                                       memcpy(ovec,ovec+num,8);
+                                       memmove(ovec,ovec+num,8);
                                else
                                        for(i=0 ; i < 8 ; ++i)
                                                ovec[i]=ovec[i+num]<<rem |
@@ -168,7 +168,7 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
                                sh[0]=v0, sh[1]=v1, sh[2]=d0, sh[3]=d1;
 #endif
                                if (rem==0)
-                                       memcpy (ovec,ovec+num,8);
+                                       memmove(ovec,ovec+num,8);
                                else
                                        for(i=0 ; i < 8 ; ++i)
                                                ovec[i]=ovec[i+num]<<rem |