Pull out EOC error checks into separate functions
authorKen Raeburn <raeburn@mit.edu>
Thu, 7 Aug 2008 00:59:29 +0000 (00:59 +0000)
committerKen Raeburn <raeburn@mit.edu>
Thu, 7 Aug 2008 00:59:29 +0000 (00:59 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20629 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/asn.1/asn1_k_decode.c
src/lib/krb5/asn.1/krb5_decode.c

index ad4539eb9577f98dbe905804d6652034c0f51596..e1d9bb2db7e60fe316827cc223da50078b217a17 100644 (file)
   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)                 \
index ea21f7e49407a9d6c2bfff344a6001144bb1d4f8..f071cbf5285436831c98f5380175e81746dcf0e2 100644 (file)
@@ -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 */