Lines Matching +full:min +full:- +full:len
2 * Copyright (c) 1997 - 2006 Kungliga Tekniska Högskolan
44 "e = decode_%s(p, len, %s, &l);\n"
51 "e = der_get_%s(p, len, %s, &l);\n"
52 "if(e) %s;\np += l; len -= l; ret += l;\n",
63 switch (t->type) {
139 *cl = t->tag.tagclass;
140 *ty = is_primitive_type(t->subtype->type) ? PRIM : CONS;
141 *tag = t->tag.tagvalue;
144 if ((t->symbol->stype == Stype && t->symbol->type == NULL)
145 || t->symbol->stype == SUndefined) {
149 t->symbol->name);
152 find_tag(t->symbol->type, cl, ty, tag);
190 if (r->min == r->max + 2 || r->min < r->max)
192 "if ((%s)->%s > %" PRId64 ") {\n"
195 name, length, r->max, forwstr);
196 if (r->min - 1 == r->max || r->min < r->max)
198 "if ((%s)->%s < %" PRId64 ") {\n"
201 name, length, r->min, forwstr);
202 if (r->max == r->min)
204 "if ((%s)->%s != %" PRId64 ") {\n"
207 name, length, r->min, forwstr);
215 switch (t->type) {
223 "e = decode_%s(p, len, %s, &l);\n",
224 t->symbol->gen_name, name);
231 "p += l; len -= l; ret += l;\n"
239 "p += l; len -= l; ret += l;\n");
244 if(t->members) {
253 } else if (t->range == NULL) {
255 } else if (t->range->min < INT_MIN && t->range->max <= INT64_MAX) {
257 } else if (t->range->min >= 0 && t->range->max > UINT_MAX) {
259 } else if (t->range->min >= INT_MIN && t->range->max <= INT_MAX) {
261 } else if (t->range->min >= 0 && t->range->max <= UINT_MAX) {
264 errx(1, "%s: unsupported range %" PRId64 " -> %" PRId64,
265 name, t->range->min, t->range->max);
285 if (t->range)
286 range_check(name, "length", forwstr, t->range);
292 if (ASN1_TAILQ_EMPTY(t->members)) {
297 "if (len < 1) return ASN1_OVERRUN;\n"
298 "p++; len--; ret++;\n");
301 "if (len < 1) break;\n");
302 ASN1_TAILQ_FOREACH(m, t->members, members) {
303 while (m->val / 8 > pos / 8) {
305 "p++; len--; ret++;\n"
306 "if (len < 1) break;\n");
310 "(%s)->%s = (*p >> %d) & 1;\n",
311 name, m->gen_name, 7 - m->val % 8);
316 "p += len; ret += len;\n");
322 if (t->members == NULL)
325 ASN1_TAILQ_FOREACH(m, t->members, members) {
328 if (m->ellipsis)
331 if (asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&",
332 name, m->gen_name) < 0 || s == NULL)
334 decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL,
345 if(t->members == NULL)
350 fprintf(codefile, "while(len > 0) {\n");
355 "e = der_get_tag (p, len, &class, &type, &tag, NULL);\n"
359 ASN1_TAILQ_FOREACH(m, t->members, members) {
362 assert(m->type->type == TTag);
365 classname(m->type->tag.tagclass),
366 is_primitive_type(m->type->subtype->type) ? "PRIM" : "CONS",
367 valuename(m->type->tag.tagclass, m->type->tag.tagvalue));
369 if (asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name) < 0 || s == NULL)
371 if(m->optional)
376 decode_type (s, m->type, 0, forwstr, m->gen_name, NULL, depth + 1);
390 ASN1_TAILQ_FOREACH(m, t->members, members) {
393 if (asprintf (&s, "%s->%s", name, m->gen_name) < 0 || s == NULL)
396 if(m->optional)
398 else if(m->defval)
399 gen_assign_defval(s, m->defval);
415 "size_t %s_origlen = len;\n"
420 "(%s)->len = 0;\n"
421 "(%s)->val = NULL;\n",
431 "size_t %s_nlen = %s_olen + sizeof(*((%s)->val));\n"
434 "%s_tmp = realloc((%s)->val, %s_olen);\n"
436 "(%s)->val = %s_tmp;\n",
445 if (asprintf (&n, "&(%s)->val[(%s)->len]", name, name) < 0 || n == NULL)
449 decode_type (n, t->subtype, 0, forwstr, sname, NULL, depth + 1);
451 "(%s)->len++;\n"
452 "len = %s_origlen - ret;\n"
458 if (t->range)
459 range_check(name, "len", forwstr, t->range);
489 fprintf(codefile, "e = der_match_tag_and_length(p, len, %s, &%s, %s, "
491 classname(t->tag.tagclass),
493 valuename(t->tag.tagclass, t->tag.tagvalue),
497 if (support_ber && t->subtype->type == TOctetString) {
503 is_primitive_type(t->subtype->type) ? "PRIM" : "CONS");
518 "p += l; len -= l; ret += l;\n"
519 "%s_oldlen = len;\n",
523 "if((is_indefinite%u = _heim_fix_dce(%s_datalen, &len)) < 0)\n"
525 "if (is_indefinite%u) { if (len < 2) { e = ASN1_OVERRUN; %s; } len -= 2; }",
529 "if (%s_datalen > len) { e = ASN1_OVERRUN; %s; }\n"
530 "len = %s_datalen;\n", tmpstr, forwstr, tmpstr);
533 decode_type (name, t->subtype, 0, forwstr, tname, ide, depth + 1);
537 "len += 2;\n"
538 "e = der_match_tag_and_length(p, len, "
542 "p += l; len -= l; ret += l;\n"
551 "len = %s_oldlen - %s_datalen;\n",
566 if (t->members == NULL)
569 ASN1_TAILQ_FOREACH(m, t->members, members) {
570 const Type *tt = m->type;
576 if (m->ellipsis) {
584 "%sif (der_match_tag(p, len, %s, %s, %s, NULL) == 0) {\n",
590 "(%s)->element = %s;\n",
591 name, m->label);
592 if (asprintf (&s, "%s(%s)->u.%s", m->optional ? "" : "&",
593 name, m->gen_name) < 0 || s == NULL)
595 decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL,
605 "(%s)->element = %s;\n"
606 "(%s)->u.%s.data = calloc(1, len);\n"
607 "if ((%s)->u.%s.data == NULL) {\n"
610 "(%s)->u.%s.length = len;\n"
611 "memcpy((%s)->u.%s.data, p, len);\n"
612 "p += len;\n"
613 "ret += len;\n"
614 "len = 0;\n"
616 name, have_ellipsis->label,
617 name, have_ellipsis->gen_name,
618 name, have_ellipsis->gen_name,
620 name, have_ellipsis->gen_name,
621 name, have_ellipsis->gen_name);
668 int preserve = preserve_type(s->name) ? TRUE : FALSE;
672 " size_t len HEIMDAL_UNUSED_ATTRIBUTE, %s *data, size_t *size)\n"
674 s->gen_name, s->gen_name);
676 switch (s->type->type) {
711 decode_type ("data", s->type, 0, "goto fail", "Top", NULL, 1);
714 "data->_save.data = calloc(1, ret);\n"
715 "if (data->_save.data == NULL) { \n"
718 "data->_save.length = ret;\n"
719 "memcpy(data->_save.data, begin, ret);\n");
727 s->gen_name);