projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
embed support for CHOICE type
[openssl.git]
/
crypto
/
asn1
/
tasn_fre.c
diff --git
a/crypto/asn1/tasn_fre.c
b/crypto/asn1/tasn_fre.c
index fd9f0466f0c00b571c55e5c5f94ca839b4b3bb31..1e778858ac13879e5877438554e3b430387d8734 100644
(file)
--- a/
crypto/asn1/tasn_fre.c
+++ b/
crypto/asn1/tasn_fre.c
@@
-63,23
+63,23
@@
#include <openssl/objects.h>
#include "asn1_locl.h"
#include <openssl/objects.h>
#include "asn1_locl.h"
-static void asn1_item_
combine
_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
-
int combine
);
+static void asn1_item_
embed
_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
+
int embed
);
/* Free up an ASN1 structure */
void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it)
{
/* Free up an ASN1 structure */
void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it)
{
- asn1_item_
combine
_free(&val, it, 0);
+ asn1_item_
embed
_free(&val, it, 0);
}
void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
{
}
void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
{
- asn1_item_
combine
_free(pval, it, 0);
+ asn1_item_
embed
_free(pval, it, 0);
}
}
-static void asn1_item_
combine
_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
-
int combine
)
+static void asn1_item_
embed
_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
+
int embed
)
{
const ASN1_TEMPLATE *tt = NULL, *seqtt;
const ASN1_EXTERN_FUNCS *ef;
{
const ASN1_TEMPLATE *tt = NULL, *seqtt;
const ASN1_EXTERN_FUNCS *ef;
@@
-125,7
+125,7
@@
static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
}
if (asn1_cb)
asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
}
if (asn1_cb)
asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
- if (
!combine
) {
+ if (
embed == 0
) {
OPENSSL_free(*pval);
*pval = NULL;
}
OPENSSL_free(*pval);
*pval = NULL;
}
@@
-163,7
+163,7
@@
static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
}
if (asn1_cb)
asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
}
if (asn1_cb)
asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
- if (
!combine
) {
+ if (
embed == 0
) {
OPENSSL_free(*pval);
*pval = NULL;
}
OPENSSL_free(*pval);
*pval = NULL;
}
@@
-173,6
+173,12
@@
static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it,
void asn1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
{
void asn1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
{
+ int embed = tt->flags & ASN1_TFLG_EMBED;
+ ASN1_VALUE *tval;
+ if (embed) {
+ tval = (ASN1_VALUE *)pval;
+ pval = &tval;
+ }
if (tt->flags & ASN1_TFLG_SK_MASK) {
STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
int i;
if (tt->flags & ASN1_TFLG_SK_MASK) {
STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
int i;
@@
-180,13
+186,12
@@
void asn1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
ASN1_VALUE *vtmp = sk_ASN1_VALUE_value(sk, i);
for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
ASN1_VALUE *vtmp = sk_ASN1_VALUE_value(sk, i);
- asn1_item_
combine_free(&vtmp, ASN1_ITEM_ptr(tt->item), 0
);
+ asn1_item_
embed_free(&vtmp, ASN1_ITEM_ptr(tt->item), embed
);
}
sk_ASN1_VALUE_free(sk);
*pval = NULL;
} else {
}
sk_ASN1_VALUE_free(sk);
*pval = NULL;
} else {
- asn1_item_combine_free(pval, ASN1_ITEM_ptr(tt->item),
- tt->flags & ASN1_TFLG_COMBINE);
+ asn1_item_embed_free(pval, ASN1_ITEM_ptr(tt->item), embed);
}
}
}
}
@@
-246,6
+251,5
@@
void asn1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
ASN1_STRING_free((ASN1_STRING *)*pval);
break;
}
ASN1_STRING_free((ASN1_STRING *)*pval);
break;
}
- if (*pval)
- *pval = NULL;
+ *pval = NULL;
}
}