diff --git a/lib/asn1/extra.c b/lib/asn1/extra.c index f9b5b7a7a..e6bc9211d 100644 --- a/lib/asn1/extra.c +++ b/lib/asn1/extra.c @@ -35,6 +35,7 @@ #include "der_locl.h" #include "heim_asn1.h" +#include "vis.h" RCSID("$Id$"); @@ -93,7 +94,18 @@ free_heim_any(heim_any *data) char * print_heim_any(const heim_any *data) { - return der_print_octet_string(data, 0); + char *s2 = NULL; + char *s = der_print_octet_string(data, 0); + int r = -1; + + if (s) + r = rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, ""); + free(s); + s = NULL; + if (r > -1) + r = asprintf(&s, "\"%s\"", s2); + free(s2); + return s; } size_t @@ -131,7 +143,18 @@ free_HEIM_ANY(heim_any *data) char * print_HEIM_ANY(const heim_any *data) { - return der_print_octet_string(data, 0); + char *s2 = NULL; + char *s = der_print_octet_string(data, 0); + int r = -1; + + if (s) + r = rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, ""); + free(s); + s = NULL; + if (r > -1) + r = asprintf(&s, "\"%s\"", s2); + free(s2); + return s; } size_t @@ -169,7 +192,18 @@ free_heim_any_set(heim_any_set *data) char * print_heim_any_set(const heim_any_set *data) { - return der_print_octet_string(data, 0); + char *s2 = NULL; + char *s = der_print_octet_string(data, 0); + int r = -1; + + if (s) + r = rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, ""); + free(s); + s = NULL; + if (r > -1) + r = asprintf(&s, "\"%s\"", s2); + free(s2); + return s; } size_t @@ -213,7 +247,18 @@ free_HEIM_ANY_SET(heim_any_set *data) char * print_HEIM_ANY_SET(const heim_any_set *data) { - return der_print_octet_string(data, 0); + char *s2 = NULL; + char *s = der_print_octet_string(data, 0); + int r = -1; + + if (s) + r = rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, ""); + free(s); + s = NULL; + if (r > -1) + r = asprintf(&s, "\"%s\"", s2); + free(s2); + return s; } size_t diff --git a/lib/asn1/template.c b/lib/asn1/template.c index 91f334e0c..7184e3ccc 100644 --- a/lib/asn1/template.c +++ b/lib/asn1/template.c @@ -2483,20 +2483,16 @@ _asn1_print(const struct asn1_template *t, r = _asn1_print(t->ptr, r, flags, indent + 1, el, saved); } else { const struct asn1_type_func *f = t->ptr; - char *s2 = NULL; char *s = NULL; s = (f->print)(el, 0); - if (s == NULL || - rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, "") == -1) { + if (s == NULL) { rk_strpoolfree(r); free(indents); - free(s); return NULL; } + r = rk_strpoolprintf(r, "%s", s); free(s); - r = rk_strpoolprintf(r, "\"%s\"", s2); - free(s2); } break; }