Bug fixes, mostly.
authorSebastian Hammer <quinn@indexdata.com>
Fri, 10 Feb 1995 15:55:28 +0000 (15:55 +0000)
committerSebastian Hammer <quinn@indexdata.com>
Fri, 10 Feb 1995 15:55:28 +0000 (15:55 +0000)
odr/ber_any.c
odr/ber_oct.c
odr/ber_tag.c
odr/odr_cons.c
odr/odr_oid.c
odr/odr_seq.c

index 8c661f0..6d69017 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_any.c,v $
- * Revision 1.1  1995-02-09 15:51:45  quinn
+ * Revision 1.2  1995-02-10 15:55:28  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.1  1995/02/09  15:51:45  quinn
  * Works better now.
  *
  */
@@ -18,7 +21,7 @@ int ber_any(ODR o, Odr_any **p)
     switch (o->direction)
     {
        case ODR_DECODE:
-           if ((res = completeBER(o->bp, o->left)) <= 0)
+           if ((res = completeBER(o->bp, 1000)) <= 0)        /* FIX THIS */
                return 0;
            (*p)->buf = nalloc(o, res);
            memcpy((*p)->buf, o->bp, res);
@@ -60,7 +63,7 @@ int completeBER(unsigned char *buf, int len)
     b += res;
     len -= res;
     if (ll >= 0)
-       return (len >= ll ? len + (b-buf) : -1);
+       return (len >= ll ? ll + (b-buf) : -1);
     if (!cons)
        return -1;    
     while (1)
index 1114aa6..a8f6e07 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_oct.c,v $
- * Revision 1.3  1995-02-03 17:04:34  quinn
+ * Revision 1.4  1995-02-10 15:55:28  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3  1995/02/03  17:04:34  quinn
  * *** empty log message ***
  *
  * Revision 1.2  1995/02/02  20:38:50  quinn
@@ -40,16 +43,15 @@ int ber_octetstring(ODR o, Odr_oct *p, int cons)
            /* primitive octetstring */
            if (len < 0)
                return 0;
-           if (len == 0)
-               return 1;
-           if (len > p->size - p->len)
+           if (len + 1 > p->size - p->len)
            {
                c = nalloc(o, p->size += len + 1);
                if (p->len)
                    memcpy(c, p->buf, p->len);
                p->buf = c;
            }
-           memcpy(p->buf + p->len, o->bp, len);
+           if (len)
+               memcpy(p->buf + p->len, o->bp, len);
            p->len += len;
            o->bp += len;
            o->left -= len;
index fd23a96..f6c3576 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_tag.c,v $
- * Revision 1.3  1995-02-09 15:51:46  quinn
+ * Revision 1.4  1995-02-10 15:55:28  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3  1995/02/09  15:51:46  quinn
  * Works better now.
  *
  * Revision 1.2  1995/02/07  17:52:59  quinn
@@ -51,6 +54,8 @@ int ber_tag(ODR o, const void *p, int class, int tag, int *constructed)
 #endif
            return 1;
        case ODR_DECODE:
+           if (o->stackp > -1 && !odr_constructed_more(o))
+               return 0;
            if (lclass < 0)
            {
                if ((br = ber_dectag(o->bp, &lclass, &ltag, &lcons)) <= 0)
index 3fdae22..92ebf6a 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_cons.c,v $
- * Revision 1.3  1995-02-09 15:51:48  quinn
+ * Revision 1.4  1995-02-10 15:55:29  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3  1995/02/09  15:51:48  quinn
  * Works better now.
  *
  * Revision 1.2  1995/02/07  17:52:59  quinn
@@ -55,6 +58,16 @@ int odr_constructed_begin(ODR o, void *p, int class, int tag)
     return 1;
 }
 
+int odr_constructed_more(ODR o)
+{
+    if (o->stackp < 0)
+       return 0;
+    if (o->stack[o->stackp].len >= 0)
+       return o->bp - o->stack[o->stackp].base < o->stack[o->stackp].len;
+    else
+       return (!(*o->bp == 0 && *(o->bp + 1) == 0));
+}
+
 int odr_constructed_end(ODR o)
 {
     int res;
index 44d88ca..9dce6b0 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_oid.c,v $
- * Revision 1.3  1995-02-09 15:51:49  quinn
+ * Revision 1.4  1995-02-10 15:55:29  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3  1995/02/09  15:51:49  quinn
  * Works better now.
  *
  * Revision 1.2  1995/02/07  14:13:46  quinn
@@ -45,10 +48,15 @@ int odr_oid(ODR o, Odr_oid **p, int opt)
     }
     if (o->direction == ODR_PRINT)
     {
-       fprintf(o->print, "%sOID\n", odr_indent(o));
+       int i;
+
+       fprintf(o->print, "%sOID:", odr_indent(o));
+       for (i = 0; (*p)[i] > -1; i++)
+           fprintf(o->print, " %d", (*p)[i]);
+       fprintf(o->print, "\n");
        return 1;
     }
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, ODR_OID_SIZE);
+       *p = nalloc(o, ODR_OID_SIZE * sizeof(**p));
     return ber_oid(o, *p);
 }
index f135d85..e08b958 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_seq.c,v $
- * Revision 1.5  1995-02-09 15:51:49  quinn
+ * Revision 1.6  1995-02-10 15:55:29  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.5  1995/02/09  15:51:49  quinn
  * Works better now.
  *
  * Revision 1.4  1995/02/07  17:53:00  quinn
@@ -64,12 +67,7 @@ int odr_sequence_end(ODR o)
 
 int odr_sequence_more(ODR o)
 {
-    if (o->stackp < 0)
-       return 0;
-    if (o->stack[o->stackp].len >= 0)
-       return o->bp - o->stack[o->stackp].base < o->stack[o->stackp].len;
-    else
-       return (!(*o->bp == 0 && *(o->bp + 1) == 0));
+    return odr_constructed_more(o);
 }
 
 int odr_sequence_of(ODR o, Odr_fun type, void *p, int *num)