* 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.
*
*/
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);
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)
* 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
/* 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;
* 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
#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, <ag, &lcons)) <= 0)
* 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
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;
* 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
}
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);
}
* 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
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)