提交 469938cb 编写于 作者: D Dr. Stephen Henson

Fixes to d2i_ASN1_OBJECT, ASN1_INTEGER_to_BN and a_strex.c
上级 eaa28181
...@@ -4,6 +4,15 @@ ...@@ -4,6 +4,15 @@
Changes between 0.9.5a and 0.9.6 [xx XXX 2000] Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
*) Fix various signed/unsigned issues to make a_strex,c
compile under VC++.
[Oscar Jacobsson <oscar.jacobsson@celocom.com>]
*) ASN1 fixes. i2d_ASN1_OBJECT was not returning the correct
length if passed a buffer. ASN1_INTEGER_to_BN failed
if passed a NULL BN and its argument was negative.
[Steve Henson, pointed out by Sven Heiberg <sven@tartu.cyber.ee>]
*) Modification to PKCS#7 encoding routines to output definite *) Modification to PKCS#7 encoding routines to output definite
length encoding. Since currently the whole structures are in length encoding. Since currently the whole structures are in
memory there's not real point in using indefinite length memory there's not real point in using indefinite length
......
...@@ -465,7 +465,7 @@ BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai, BIGNUM *bn) ...@@ -465,7 +465,7 @@ BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai, BIGNUM *bn)
if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL) if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL)
ASN1err(ASN1_F_ASN1_INTEGER_TO_BN,ASN1_R_BN_LIB); ASN1err(ASN1_F_ASN1_INTEGER_TO_BN,ASN1_R_BN_LIB);
if(ai->type == V_ASN1_NEG_INTEGER) bn->neg = 1; if(ai->type == V_ASN1_NEG_INTEGER) ret->neg = 1;
return(ret); return(ret);
} }
......
...@@ -65,11 +65,12 @@ ...@@ -65,11 +65,12 @@
int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp) int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp)
{ {
unsigned char *p; unsigned char *p;
int objsize;
if ((a == NULL) || (a->data == NULL)) return(0); if ((a == NULL) || (a->data == NULL)) return(0);
if (pp == NULL) objsize = ASN1_object_size(0,a->length,V_ASN1_OBJECT);
return(ASN1_object_size(0,a->length,V_ASN1_OBJECT)); if (pp == NULL) return objsize;
p= *pp; p= *pp;
ASN1_put_object(&p,0,a->length,V_ASN1_OBJECT,V_ASN1_UNIVERSAL); ASN1_put_object(&p,0,a->length,V_ASN1_OBJECT,V_ASN1_UNIVERSAL);
...@@ -77,7 +78,7 @@ int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp) ...@@ -77,7 +78,7 @@ int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp)
p+=a->length; p+=a->length;
*pp=p; *pp=p;
return(a->length); return(objsize);
} }
int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
......
...@@ -96,7 +96,7 @@ int send_bio_chars(void *arg, const void *buf, int len) ...@@ -96,7 +96,7 @@ int send_bio_chars(void *arg, const void *buf, int len)
int send_fp_chars(void *arg, const void *buf, int len) int send_fp_chars(void *arg, const void *buf, int len)
{ {
if(!arg) return 1; if(!arg) return 1;
if(fwrite(buf, 1, len, arg) != len) return 0; if(fwrite(buf, 1, len, arg) != (unsigned int)len) return 0;
return 1; return 1;
} }
...@@ -123,7 +123,7 @@ static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes, ch ...@@ -123,7 +123,7 @@ static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes, ch
if(!io_ch(arg, tmphex, 6)) return -1; if(!io_ch(arg, tmphex, 6)) return -1;
return 6; return 6;
} }
chtmp = c; chtmp = (unsigned char)c;
if(chtmp > 0x7f) chflgs = flags & ASN1_STRFLGS_ESC_MSB; if(chtmp > 0x7f) chflgs = flags & ASN1_STRFLGS_ESC_MSB;
else chflgs = char_type[chtmp] & flags; else chflgs = char_type[chtmp] & flags;
if(chflgs & CHARTYPE_BS_ESC) { if(chflgs & CHARTYPE_BS_ESC) {
...@@ -200,12 +200,12 @@ static int do_buf(unsigned char *buf, int buflen, ...@@ -200,12 +200,12 @@ static int do_buf(unsigned char *buf, int buflen,
* otherwise each character will be > 0x7f and so the * otherwise each character will be > 0x7f and so the
* character will never be escaped on first and last. * character will never be escaped on first and last.
*/ */
len = do_esc_char(utfbuf[i], flags | orflags, quotes, io_ch, arg); len = do_esc_char(utfbuf[i], (unsigned char)(flags | orflags), quotes, io_ch, arg);
if(len < 0) return -1; if(len < 0) return -1;
outlen += len; outlen += len;
} }
} else { } else {
len = do_esc_char(c, flags | orflags, quotes, io_ch, arg); len = do_esc_char(c, (unsigned char)(flags | orflags), quotes, io_ch, arg);
if(len < 0) return -1; if(len < 0) return -1;
outlen += len; outlen += len;
} }
...@@ -304,7 +304,7 @@ static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags, ASN1_STR ...@@ -304,7 +304,7 @@ static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags, ASN1_STR
unsigned char flags; unsigned char flags;
quotes = 0; quotes = 0;
/* Keep a copy of escape flags */ /* Keep a copy of escape flags */
flags = lflags & ESC_FLAGS; flags = (unsigned char)(lflags & ESC_FLAGS);
type = str->type; type = str->type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册