PR: 2253
authorDr. Stephen Henson <steve@openssl.org>
Sat, 15 May 2010 00:34:06 +0000 (00:34 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sat, 15 May 2010 00:34:06 +0000 (00:34 +0000)
Submitted By: Ger Hobbelt <ger@hobbelt.com>

Check callback return value when outputting errors.

apps/pkcs12.c
crypto/err/err_prn.c

index 514a02e0f128881746d500bf760f72ecfe7f4507..decb23e1857a1e2d8760b61019635fdc955e55af 100644 (file)
@@ -813,6 +813,16 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
        default:
                BIO_printf (bio_err, "Warning unsupported bag type: ");
                i2a_ASN1_OBJECT (bio_err, bag->type);
        default:
                BIO_printf (bio_err, "Warning unsupported bag type: ");
                i2a_ASN1_OBJECT (bio_err, bag->type);
+{
+unsigned char *foo = NULL;
+int foolen;
+FILE *op;
+foolen = i2d_PKCS12_SAFEBAG(bag, &foo);
+op = fopen("/tmp/unknown.der", "w");
+fwrite(foo, 1, foolen, op);
+fclose(op);
+}
+
                BIO_printf (bio_err, "\n");
                return 1;
        break;
                BIO_printf (bio_err, "\n");
                return 1;
        break;
index de32f332c419f68f10042aa33d2b8aaa4d5bbc7a..a0168ac8ed628fd4d511059d68b0bffaebad92ed 100644 (file)
@@ -81,7 +81,8 @@ void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
                ERR_error_string_n(l, buf, sizeof buf);
                BIO_snprintf(buf2, sizeof(buf2), "%lu:%s:%s:%d:%s\n", es, buf,
                        file, line, (flags & ERR_TXT_STRING) ? data : "");
                ERR_error_string_n(l, buf, sizeof buf);
                BIO_snprintf(buf2, sizeof(buf2), "%lu:%s:%s:%d:%s\n", es, buf,
                        file, line, (flags & ERR_TXT_STRING) ? data : "");
-               cb(buf2, strlen(buf2), u);
+               if (cb(buf2, strlen(buf2), u) <= 0)
+                       break; /* abort outputting the error report */
                }
        }
 
                }
        }