"Overload" SunOS 4.x memcmp, which ruins ASN1_OBJECT table lookups.
authorAndy Polyakov <appro@openssl.org>
Tue, 20 Sep 2005 20:19:07 +0000 (20:19 +0000)
committerAndy Polyakov <appro@openssl.org>
Tue, 20 Sep 2005 20:19:07 +0000 (20:19 +0000)
PR: 1196
Submitted by: Russel Ruby

crypto/asn1/tasn_enc.c
crypto/o_str.c
crypto/o_str.h
e_os.h

index 4ab1ea10f53dff967ac17be186beda1e2cea99bb..60b29ce822f783a989275f0e5b9475f7ed40743a 100644 (file)
@@ -59,6 +59,7 @@
 
 #include <stddef.h>
 #include <string.h>
+#include "cryptlib.h"
 #include <openssl/asn1.h>
 #include <openssl/asn1t.h>
 #include <openssl/objects.h>
index da8860491d69a5223ddee8d85a95ca06ad2ee98d..2db099333a7fd0781463f44b0023db619d0ffee0 100644 (file)
@@ -94,3 +94,12 @@ int OPENSSL_strcasecmp(const char *str1, const char *str2)
 #endif
        }
 
+int OPENSSL_memcmp(const void *v1,const void *v2,size_t n)
+       {
+       const unsigned char *c1=v1,*c2=v2;
+       int ret=0;
+
+       while(n && (ret=*c1-*c2)==0) n--,c1++,c2++;
+
+       return ret;
+       }
index 4a70a9e00badda552abefd382ca964c3bf2c74c0..dfc98494c6c5481174645d6a0236b4412231af84 100644 (file)
@@ -63,5 +63,6 @@
 
 int OPENSSL_strcasecmp(const char *str1, const char *str2);
 int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n);
+int OPENSSL_memcmp(const void *p1,const void *p2,size_t n);
 
 #endif
diff --git a/e_os.h b/e_os.h
index 9bebed131eb599815fab540af4c3d56e9b5c81cb..e156b63394e77c88f757abb98d42087938c30066 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -565,6 +565,9 @@ extern HINSTANCE _hInstance;
 extern char *sys_errlist[]; extern int sys_nerr;
 # define strerror(errnum) \
        (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum])
+  /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */
+#include "o_str.h"
+# define memcmp OPENSSL_memcmp
 #endif
 
 #ifndef OPENSSL_EXIT