EBCDIC bug fix from main branch.
[oweals/openssl.git] / crypto / x509v3 / v3_prn.c
index 5416f662d3155cf0abbb362e4362b4d1d411e71d..14b804c4ad33e4f6e2ed4ca3c1e54bef38098fa2 100644 (file)
@@ -64,8 +64,6 @@
 
 /* Extension printing routines */
 
-static int unknown_ext_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent, int supported);
-
 /* Print out a name+value stack */
 
 void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml)
@@ -87,9 +85,16 @@ void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml)
                else BIO_printf(out, "%s:%s", nval->name, nval->value);
 #else
                else {
-                       char tmp[10240]; /* 10k is BIO_printf's limit anyway */
-                       ascii2ebcdic(tmp, nval->value, strlen(nval->value)+1);
-                       BIO_printf(out, "%s:%s", nval->name, tmp);
+                       int len;
+                       char *tmp;
+                       len = strlen(nval->value)+1;
+                       tmp = OPENSSL_malloc(len);
+                       if (tmp)
+                       {
+                               ascii2ebcdic(tmp, nval->value, len);
+                               BIO_printf(out, "%s:%s", nval->name, tmp);
+                               OPENSSL_free(tmp);
+                       }
                }
 #endif
                if(ml) BIO_puts(out, "\n");
@@ -98,18 +103,16 @@ void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml)
 
 /* Main routine: print out a general extension */
 
-int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent)
+int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, int flag, int indent)
 {
        char *ext_str = NULL, *value = NULL;
        unsigned char *p;
        X509V3_EXT_METHOD *method;      
        STACK_OF(CONF_VALUE) *nval = NULL;
        int ok = 1;
-       if(!(method = X509V3_EXT_get(ext)))
-               return unknown_ext_print(out, ext, flag, indent, 0);
+       if(!(method = X509V3_EXT_get(ext))) return 0;
        p = ext->value->data;
-       if(!(ext_str = method->d2i(NULL, &p, ext->value->length)))
-               return unknown_ext_print(out, ext, flag, indent, 1);
+       if(!(ext_str = method->d2i(NULL, &p, ext->value->length))) return 0;
        if(method->i2s) {
                if(!(value = method->i2s(method, ext_str))) {
                        ok = 0;
@@ -119,9 +122,16 @@ int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int inde
                BIO_printf(out, "%*s%s", indent, "", value);
 #else
                {
-                       char tmp[10240]; /* 10k is BIO_printf's limit anyway */
-                       ascii2ebcdic(tmp, value, strlen(value)+1);
-                       BIO_printf(out, "%*s%s", indent, "", tmp);
+                       int len;
+                       char *tmp;
+                       len = strlen(value)+1;
+                       tmp = OPENSSL_malloc(len);
+                       if (tmp)
+                       {
+                               ascii2ebcdic(tmp, value, len);
+                               BIO_printf(out, "%*s%s", indent, "", tmp);
+                               OPENSSL_free(tmp);
+                       }
                }
 #endif
        } else if(method->i2v) {
@@ -142,32 +152,6 @@ int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int inde
                return ok;
 }
 
-static int unknown_ext_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent, int supported)
-{
-       switch(flag & X509V3_EXT_UNKNOWN_MASK) {
-
-               case X509V3_EXT_DEFAULT:
-               return 0;
-
-               case X509V3_EXT_ERROR_UNKNOWN:
-               if(supported)
-                       BIO_printf(out, "%*s<Parse Error>", indent, "");
-               else
-                       BIO_printf(out, "%*s<Not Supported>", indent, "");
-               return 1;
-
-               case X509V3_EXT_PARSE_UNKNOWN:
-                       return ASN1_parse_dump(out,
-                               ext->value->data, ext->value->length, indent, -1);
-               case X509V3_EXT_DUMP_UNKNOWN:
-                       return BIO_dump_indent(out, (char *)ext->value->data, ext->value->length, indent);
-
-               default:
-               return 1;
-       }
-}
-       
-
 #ifndef NO_FP_API
 int X509V3_EXT_print_fp(FILE *fp, X509_EXTENSION *ext, int flag, int indent)
 {