X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fasn1%2Fa_utf8.c;h=854278f136e75977ac888d7e392224ca9415ca6a;hb=eaa28181898b8ca0b54552a3290789bb17444c8a;hp=6179bd09a33ac20d2e6ce20f9caa0ca0f588e00e;hpb=aef838fc957afefc4d49a360f1ab77b14595f27c;p=oweals%2Fopenssl.git diff --git a/crypto/asn1/a_utf8.c b/crypto/asn1/a_utf8.c index 6179bd09a3..854278f136 100644 --- a/crypto/asn1/a_utf8.c +++ b/crypto/asn1/a_utf8.c @@ -60,6 +60,12 @@ #include "cryptlib.h" #include +ASN1_UTF8STRING *ASN1_UTF8STRING_new(void) +{ return M_ASN1_UTF8STRING_new();} + +void ASN1_UTF8STRING_free(ASN1_UTF8STRING *x) +{ M_ASN1_UTF8STRING_free(x);} + int i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **pp) { return(i2d_ASN1_bytes((ASN1_STRING *)a,pp, @@ -94,9 +100,9 @@ ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, unsigned char **pp, * -4 = character encoded incorrectly (not minimal length). */ -int UTF8_getc(unsigned char *str, int len, unsigned long *val) +int UTF8_getc(const unsigned char *str, int len, unsigned long *val) { - unsigned char *p; + const unsigned char *p; unsigned long value; int ret; if(len <= 0) return 0; @@ -127,7 +133,7 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val) if( ((p[1] & 0xc0) != 0x80) || ((p[2] & 0xc0) != 0x80) || ((p[3] & 0xc0) != 0x80) ) return -3; - value = (*p++ & 0x7) << 18; + value = ((unsigned long)(*p++ & 0x7)) << 18; value |= (*p++ & 0x3f) << 12; value |= (*p++ & 0x3f) << 6; value |= *p++ & 0x3f; @@ -139,9 +145,9 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val) || ((p[2] & 0xc0) != 0x80) || ((p[3] & 0xc0) != 0x80) || ((p[4] & 0xc0) != 0x80) ) return -3; - value = (*p++ & 0x3) << 24; - value |= (*p++ & 0x3f) << 18; - value |= (*p++ & 0x3f) << 12; + value = ((unsigned long)(*p++ & 0x3)) << 24; + value |= ((unsigned long)(*p++ & 0x3f)) << 18; + value |= ((unsigned long)(*p++ & 0x3f)) << 12; value |= (*p++ & 0x3f) << 6; value |= *p++ & 0x3f; if(value < 0x200000) return -4; @@ -153,10 +159,10 @@ int UTF8_getc(unsigned char *str, int len, unsigned long *val) || ((p[3] & 0xc0) != 0x80) || ((p[4] & 0xc0) != 0x80) || ((p[5] & 0xc0) != 0x80) ) return -3; - value = (*p++ & 0x1) << 30; - value |= (*p++ & 0x3f) << 24; - value |= (*p++ & 0x3f) << 18; - value |= (*p++ & 0x3f) << 12; + value = ((unsigned long)(*p++ & 0x1)) << 30; + value |= ((unsigned long)(*p++ & 0x3f)) << 24; + value |= ((unsigned long)(*p++ & 0x3f)) << 18; + value |= ((unsigned long)(*p++ & 0x3f)) << 12; value |= (*p++ & 0x3f) << 6; value |= *p++ & 0x3f; if(value < 0x4000000) return -4; @@ -178,55 +184,55 @@ int UTF8_putc(unsigned char *str, int len, unsigned long value) if(!str) len = 6; /* Maximum we will need */ else if(len <= 0) return -1; if(value < 0x80) { - if(str) *str = value; + if(str) *str = (unsigned char)value; return 1; } if(value < 0x800) { if(len < 2) return -1; if(str) { - *str++ = ((value >> 6) & 0x1f) | 0xc0; - *str = (value & 0x3f) | 0x80; + *str++ = (unsigned char)(((value >> 6) & 0x1f) | 0xc0); + *str = (unsigned char)((value & 0x3f) | 0x80); } return 2; } if(value < 0x10000) { if(len < 3) return -1; if(str) { - *str++ = ((value >> 12) & 0xf) | 0xe0; - *str++ = ((value >> 6) & 0x3f) | 0x80; - *str = (value & 0x3f) | 0x80; + *str++ = (unsigned char)(((value >> 12) & 0xf) | 0xe0); + *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80); + *str = (unsigned char)((value & 0x3f) | 0x80); } return 3; } if(value < 0x200000) { if(len < 4) return -1; if(str) { - *str++ = ((value >> 18) & 0x7) | 0xf0; - *str++ = ((value >> 12) & 0x3f) | 0x80; - *str++ = ((value >> 6) & 0x3f) | 0x80; - *str = (value & 0x3f) | 0x80; + *str++ = (unsigned char)(((value >> 18) & 0x7) | 0xf0); + *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80); + *str = (unsigned char)((value & 0x3f) | 0x80); } return 4; } if(value < 0x4000000) { if(len < 5) return -1; if(str) { - *str++ = ((value >> 24) & 0x3) | 0xf8; - *str++ = ((value >> 18) & 0x3f) | 0x80; - *str++ = ((value >> 12) & 0x3f) | 0x80; - *str++ = ((value >> 6) & 0x3f) | 0x80; - *str = (value & 0x3f) | 0x80; + *str++ = (unsigned char)(((value >> 24) & 0x3) | 0xf8); + *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80); + *str = (unsigned char)((value & 0x3f) | 0x80); } return 5; } if(len < 6) return -1; if(str) { - *str++ = ((value >> 30) & 0x1) | 0xfc; - *str++ = ((value >> 24) & 0x3f) | 0x80; - *str++ = ((value >> 18) & 0x3f) | 0x80; - *str++ = ((value >> 12) & 0x3f) | 0x80; - *str++ = ((value >> 6) & 0x3f) | 0x80; - *str = (value & 0x3f) | 0x80; + *str++ = (unsigned char)(((value >> 30) & 0x1) | 0xfc); + *str++ = (unsigned char)(((value >> 24) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80); + *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80); + *str = (unsigned char)((value & 0x3f) | 0x80); } return 6; }