- }
- else
- {
- o->error = OOTHER;
- return 0;
- }
- }
- else if (o->bp - o->stack[o->stackp].base !=
- o->stack[o->stackp].len)
- {
- o->error = OOTHER;
- return 0;
- }
- o->stackp--;
- return 1;
- case ODR_ENCODE:
- if ((res = ber_enclen(o->stack[o->stackp].lenb,
- o->bp - o->stack[o->stackp].base,
- o->stack[o->stackp].lenlen, 1)) < 0)
- {
- o->error = OSPACE;
- return 0;
- }
- if (res == 0) /* indefinite encoding */
- {
+ }
+ else
+ {
+ odr_seterror(o, OOTHER, 35);
+ return 0;
+ }
+ }
+ else if (o->bp - o->op->stack[o->op->stackp].base !=
+ o->op->stack[o->op->stackp].len)
+ {
+ odr_seterror(o, OCONLEN, 36);
+ return 0;
+ }
+ o->op->stackp--;
+ return 1;
+ case ODR_ENCODE:
+ pos = odr_tell(o);
+ odr_seek(o, ODR_S_SET, o->op->stack[o->op->stackp].len_offset);
+ if ((res = ber_enclen(o, pos - o->op->stack[o->op->stackp].base_offset,
+ o->op->stack[o->op->stackp].lenlen, 1)) < 0)
+ {
+ odr_seterror(o, OLENOV, 37);
+ return 0;
+ }
+ odr_seek(o, ODR_S_END, 0);
+ if (res == 0) /* indefinite encoding */
+ {