From c121e1abc698311b953bc623921758e5c35d3e99 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Thu, 7 Aug 2008 00:59:29 +0000 Subject: [PATCH] Pull out EOC error checks into separate functions git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20629 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/krb5/asn.1/asn1_k_decode.c | 23 +++++++++++++++++------ src/lib/krb5/asn.1/krb5_decode.c | 23 +++++++++++++++++------ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/lib/krb5/asn.1/asn1_k_decode.c b/src/lib/krb5/asn.1/asn1_k_decode.c index ad4539eb9..e1d9bb2db 100644 --- a/src/lib/krb5/asn.1/asn1_k_decode.c +++ b/src/lib/krb5/asn.1/asn1_k_decode.c @@ -52,20 +52,31 @@ indef = t2.indef; \ } +static asn1_error_code +asn1_get_eoc_tag (asn1buf *buf, taginfo *tinfo) +{ + asn1_error_code retval; + + retval = asn1_get_tag_2(buf, tinfo); + if (retval) + return retval; + if (tinfo->asn1class != UNIVERSAL || tinfo->tagnum || tinfo->indef) + return ASN1_MISSING_EOC; + return 0; +} + /* Force check for EOC tag. */ #define get_eoc() \ { \ taginfo t3; \ - retval = asn1_get_tag_2(&subbuf, &t3); \ + retval = asn1_get_eoc_tag(&subbuf, &t3); \ if(retval) return retval; \ - if (t3.asn1class != UNIVERSAL || t3.tagnum || t3.indef) \ - return ASN1_MISSING_EOC; \ /* Copy out to match previous functionality, until better integrated. */ \ - asn1class = t3.asn1class; \ + asn1class = UNIVERSAL; \ construction = t3.construction; \ - tagnum = t3.tagnum; \ + tagnum = 0; \ taglen = t3.length; \ - indef = t3.indef; \ + indef = 0; \ } #define alloc_field(var, type) \ diff --git a/src/lib/krb5/asn.1/krb5_decode.c b/src/lib/krb5/asn.1/krb5_decode.c index ea21f7e49..f071cbf52 100644 --- a/src/lib/krb5/asn.1/krb5_decode.c +++ b/src/lib/krb5/asn.1/krb5_decode.c @@ -93,17 +93,28 @@ if((var) == NULL) clean_return(ENOMEM) taglen = t2.length; \ } +static asn1_error_code +asn1_get_eoc_tag (asn1buf *buf, taginfo *tinfo) +{ + asn1_error_code retval; + + retval = asn1_get_tag_2(buf, tinfo); + if (retval) + return retval; + if (tinfo->asn1class != UNIVERSAL || tinfo->tagnum || tinfo->indef) + return ASN1_MISSING_EOC; + return 0; +} + #define get_eoc() \ { \ taginfo t3; \ - retval = asn1_get_tag_2(&subbuf, &t3); \ + retval = asn1_get_eoc_tag(&subbuf, &t3); \ if (retval) return retval; \ - if (t3.asn1class != UNIVERSAL || t3.tagnum || t3.indef) \ - return ASN1_MISSING_EOC; \ - asn1class = t3.asn1class; \ + asn1class = UNIVERSAL; \ construction = t3.construction; \ - tagnum = t3.tagnum; \ - indef = t3.indef; \ + tagnum = 0; \ + indef = 0; \ } /* decode sequence header and initialize tagnum with the first field */ -- 2.26.2