Extra ; removed.
[openssl.git] / crypto / asn1 / a_bytes.c
index 9828a55b33c8a6b4a1fede70cf8a01029b8c1275..afd27b80e1b0e8a4db35c30dc87050fa966cac57 100644 (file)
 
 #include <stdio.h>
 #include "cryptlib.h"
-#include "asn1_mac.h"
-
-/* ASN1err(ASN1_F_D2I_ASN1_TYPE_BYTES,ASN1_R_WRONG_TYPE);
- * ASN1err(ASN1_F_ASN1_COLLATE_PRIMATIVE,ASN1_R_WRONG_TAG);
- */
-
-static unsigned long tag2bit[32]={
-0,     0,      0,      B_ASN1_BIT_STRING,      /* tags  0 -  3 */
-B_ASN1_OCTET_STRING,   0,      0,              B_ASN1_UNKNOWN,/* tags  4- 7 */
-B_ASN1_UNKNOWN,        B_ASN1_UNKNOWN, B_ASN1_UNKNOWN, B_ASN1_UNKNOWN,/* tags  8-11 */
-B_ASN1_UTF8STRING,B_ASN1_UNKNOWN,B_ASN1_UNKNOWN,B_ASN1_UNKNOWN,/* tags 12-15 */
-0,     0,      B_ASN1_NUMERICSTRING,B_ASN1_PRINTABLESTRING,
-B_ASN1_T61STRING,B_ASN1_VIDEOTEXSTRING,B_ASN1_IA5STRING,0,
-0,B_ASN1_GRAPHICSTRING,B_ASN1_ISO64STRING,B_ASN1_GENERALSTRING,
-B_ASN1_UNIVERSALSTRING,B_ASN1_UNKNOWN,B_ASN1_BMPSTRING,B_ASN1_UNKNOWN,
-       };
-
-#ifndef NOPROTO
-static int asn1_collate_primative(ASN1_STRING *a, ASN1_CTX *c);
-#else
-static int asn1_collate_primative();
-#endif
+#include <openssl/asn1.h>
 
+static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c);
 /* type is a 'bitmap' of acceptable string types.
  */
-ASN1_STRING *d2i_ASN1_type_bytes(a, pp, length, type)
-ASN1_STRING **a;
-unsigned char **pp;
-long length;
-int type;
+ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, unsigned char **pp,
+            long length, int type)
        {
        ASN1_STRING *ret=NULL;
        unsigned char *p,*s;
@@ -104,7 +81,7 @@ int type;
                i=ASN1_R_TAG_VALUE_TOO_HIGH;;
                goto err;
                }
-       if (!(tag2bit[tag] & type))
+       if (!(ASN1_tag2bit(tag) & type))
                {
                i=ASN1_R_WRONG_TYPE;
                goto err;
@@ -123,7 +100,7 @@ int type;
 
        if (len != 0)
                {
-               s=(unsigned char *)Malloc((int)len+1);
+               s=(unsigned char *)OPENSSL_malloc((int)len+1);
                if (s == NULL)
                        {
                        i=ERR_R_MALLOC_FAILURE;
@@ -136,7 +113,7 @@ int type;
        else
                s=NULL;
 
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) OPENSSL_free(ret->data);
        ret->length=(int)len;
        ret->data=s;
        ret->type=tag;
@@ -150,11 +127,7 @@ err:
        return(NULL);
        }
 
-int i2d_ASN1_bytes(a, pp, tag, xclass)
-ASN1_STRING *a;
-unsigned char **pp;
-int tag;
-int xclass;
+int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass)
        {
        int ret,r,constructed;
        unsigned char *p;
@@ -180,12 +153,8 @@ int xclass;
        return(r);
        }
 
-ASN1_STRING *d2i_ASN1_bytes(a, pp, length, Ptag, Pclass)
-ASN1_STRING **a;
-unsigned char **pp;
-long length;
-int Ptag;
-int Pclass;
+ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
+            int Ptag, int Pclass)
        {
        ASN1_STRING *ret=NULL;
        unsigned char *p,*s;
@@ -225,7 +194,7 @@ int Pclass;
                c.tag=Ptag;
                c.xclass=Pclass;
                c.max=(length == 0)?0:(p+length);
-               if (!asn1_collate_primative(ret,&c)) 
+               if (!asn1_collate_primitive(ret,&c)) 
                        goto err; 
                else
                        {
@@ -238,8 +207,8 @@ int Pclass;
                        {
                        if ((ret->length < len) || (ret->data == NULL))
                                {
-                               if (ret->data != NULL) Free((char *)ret->data);
-                               s=(unsigned char *)Malloc((int)len);
+                               if (ret->data != NULL) OPENSSL_free(ret->data);
+                               s=(unsigned char *)OPENSSL_malloc((int)len + 1);
                                if (s == NULL)
                                        {
                                        i=ERR_R_MALLOC_FAILURE;
@@ -249,12 +218,13 @@ int Pclass;
                        else
                                s=ret->data;
                        memcpy(s,p,(int)len);
+                       s[len] = '\0';
                        p+=len;
                        }
                else
                        {
                        s=NULL;
-                       if (ret->data != NULL) Free((char *)ret->data);
+                       if (ret->data != NULL) OPENSSL_free(ret->data);
                        }
 
                ret->length=(int)len;
@@ -273,13 +243,11 @@ err:
        }
 
 
-/* We are about to parse 0..n d2i_ASN1_bytes objects, we are to collapes
- * them into the one struture that is then returned */
+/* We are about to parse 0..n d2i_ASN1_bytes objects, we are to collapse
+ * them into the one structure that is then returned */
 /* There have been a few bug fixes for this function from
  * Paul Keogh <paul.keogh@sse.ie>, many thanks to him */
-static int asn1_collate_primative(a,c)
-ASN1_STRING *a;
-ASN1_CTX *c;
+static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
        {
        ASN1_STRING *os=NULL;
        BUF_MEM b;
@@ -317,7 +285,7 @@ ASN1_CTX *c;
                        goto err;
                        }
 
-               if (!BUF_MEM_grow(&b,num+os->length))
+               if (!BUF_MEM_grow_clean(&b,num+os->length))
                        {
                        c->error=ERR_R_BUF_LIB;
                        goto err;
@@ -331,14 +299,14 @@ ASN1_CTX *c;
        if (!asn1_Finish(c)) goto err;
 
        a->length=num;
-       if (a->data != NULL) Free(a->data);
+       if (a->data != NULL) OPENSSL_free(a->data);
        a->data=(unsigned char *)b.data;
        if (os != NULL) ASN1_STRING_free(os);
        return(1);
 err:
-       ASN1err(ASN1_F_ASN1_COLLATE_PRIMATIVE,c->error);
+       ASN1err(ASN1_F_ASN1_COLLATE_PRIMITIVE,c->error);
        if (os != NULL) ASN1_STRING_free(os);
-       if (b.data != NULL) Free(b.data);
+       if (b.data != NULL) OPENSSL_free(b.data);
        return(0);
        }