Fixed bugs in completeBER and (serious one in) ber_oid.
[yaz-moved-to-github.git] / odr / ber_any.c
index 84d07a6..35c0a83 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_any.c,v $
- * Revision 1.4  1995-02-14 11:54:33  quinn
+ * Revision 1.5  1995-02-14 20:39:54  quinn
+ * Fixed bugs in completeBER and (serious one in) ber_oid.
+ *
+ * Revision 1.4  1995/02/14  11:54:33  quinn
  * Adjustments.
  *
  * Revision 1.3  1995/02/10  18:57:24  quinn
@@ -54,6 +57,8 @@ int completeBER(unsigned char *buf, int len)
     int res, ll, class, tag, cons;
     unsigned char *b = buf;
     
+    if (!len)
+       return 0;
     if (!buf[0] && !buf[1])
        return 0;
     if ((res = ber_dectag(b, &class, &tag, &cons)) <= 0)
@@ -72,15 +77,15 @@ int completeBER(unsigned char *buf, int len)
        return (len >= ll ? ll + (b-buf) : 0);
     if (!cons)
        return 0;    
-    while (1)
+    /* constructed - cycle through children */
+    while (len >= 2)
     {
+       if (*b == 0 && *(b + 1) == 0)
+           break;
        if (!(res = completeBER(b, len)))
            return 0;
        b += res;
        len -= res;
-       if (len < 2)
-           return 0;
-       if (*b == 0 && *(b + 1) == 0)
-           return (b - buf) + 2;
     }
+    return (b - buf) + 2;
 }