asn1: Fix JSON print bug for IMPORTed types
This commit is contained in:
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "der_locl.h"
|
#include "der_locl.h"
|
||||||
#include "heim_asn1.h"
|
#include "heim_asn1.h"
|
||||||
|
#include "vis.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -93,7 +94,18 @@ free_heim_any(heim_any *data)
|
|||||||
char *
|
char *
|
||||||
print_heim_any(const heim_any *data)
|
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
|
size_t
|
||||||
@@ -131,7 +143,18 @@ free_HEIM_ANY(heim_any *data)
|
|||||||
char *
|
char *
|
||||||
print_HEIM_ANY(const heim_any *data)
|
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
|
size_t
|
||||||
@@ -169,7 +192,18 @@ free_heim_any_set(heim_any_set *data)
|
|||||||
char *
|
char *
|
||||||
print_heim_any_set(const heim_any_set *data)
|
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
|
size_t
|
||||||
@@ -213,7 +247,18 @@ free_HEIM_ANY_SET(heim_any_set *data)
|
|||||||
char *
|
char *
|
||||||
print_HEIM_ANY_SET(const heim_any_set *data)
|
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
|
size_t
|
||||||
|
@@ -2483,20 +2483,16 @@ _asn1_print(const struct asn1_template *t,
|
|||||||
r = _asn1_print(t->ptr, r, flags, indent + 1, el, saved);
|
r = _asn1_print(t->ptr, r, flags, indent + 1, el, saved);
|
||||||
} else {
|
} else {
|
||||||
const struct asn1_type_func *f = t->ptr;
|
const struct asn1_type_func *f = t->ptr;
|
||||||
char *s2 = NULL;
|
|
||||||
char *s = NULL;
|
char *s = NULL;
|
||||||
|
|
||||||
s = (f->print)(el, 0);
|
s = (f->print)(el, 0);
|
||||||
if (s == NULL ||
|
if (s == NULL) {
|
||||||
rk_strasvis(&s2, s, VIS_CSTYLE|VIS_TAB|VIS_NL|VIS_DQ, "") == -1) {
|
|
||||||
rk_strpoolfree(r);
|
rk_strpoolfree(r);
|
||||||
free(indents);
|
free(indents);
|
||||||
free(s);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
r = rk_strpoolprintf(r, "%s", s);
|
||||||
free(s);
|
free(s);
|
||||||
r = rk_strpoolprintf(r, "\"%s\"", s2);
|
|
||||||
free(s2);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user