|
@@ -528,14 +528,15 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level)
|
|
|
|
|
|
/* Decode */
|
|
/* Decode */
|
|
if ((err = (Decoders[son->type]) (bs, son, base,
|
|
if ((err = (Decoders[son->type]) (bs, son, base,
|
|
- level + 1)) >
|
|
|
|
- H323_ERROR_STOP)
|
|
|
|
|
|
+ level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
bs->cur = beg + len;
|
|
bs->cur = beg + len;
|
|
bs->bit = 0;
|
|
bs->bit = 0;
|
|
} else if ((err = (Decoders[son->type]) (bs, son, base,
|
|
} else if ((err = (Decoders[son->type]) (bs, son, base,
|
|
- level + 1)))
|
|
|
|
|
|
+ level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -554,7 +555,7 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level)
|
|
|
|
|
|
/* Decode the extension components */
|
|
/* Decode the extension components */
|
|
for (opt = 0; opt < bmp2_len; opt++, i++, son++) {
|
|
for (opt = 0; opt < bmp2_len; opt++, i++, son++) {
|
|
- if (son->attr & STOP) {
|
|
|
|
|
|
+ if (i < f->ub && son->attr & STOP) {
|
|
PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, " ",
|
|
PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, " ",
|
|
son->name);
|
|
son->name);
|
|
return H323_ERROR_STOP;
|
|
return H323_ERROR_STOP;
|
|
@@ -584,8 +585,8 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level)
|
|
beg = bs->cur;
|
|
beg = bs->cur;
|
|
|
|
|
|
if ((err = (Decoders[son->type]) (bs, son, base,
|
|
if ((err = (Decoders[son->type]) (bs, son, base,
|
|
- level + 1)) >
|
|
|
|
- H323_ERROR_STOP)
|
|
|
|
|
|
+ level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
bs->cur = beg + len;
|
|
bs->cur = beg + len;
|
|
@@ -660,18 +661,20 @@ int decode_seqof(bitstr_t * bs, field_t * f, char *base, int level)
|
|
i <
|
|
i <
|
|
effective_count ?
|
|
effective_count ?
|
|
base : NULL,
|
|
base : NULL,
|
|
- level + 1)) >
|
|
|
|
- H323_ERROR_STOP)
|
|
|
|
|
|
+ level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
bs->cur = beg + len;
|
|
bs->cur = beg + len;
|
|
bs->bit = 0;
|
|
bs->bit = 0;
|
|
} else
|
|
} else
|
|
- if ((err = (Decoders[son->type]) (bs, son,
|
|
|
|
- i < effective_count ?
|
|
|
|
- base : NULL,
|
|
|
|
- level + 1)))
|
|
|
|
- return err;
|
|
|
|
|
|
+ if ((err = (Decoders[son->type]) (bs, son,
|
|
|
|
+ i <
|
|
|
|
+ effective_count ?
|
|
|
|
+ base : NULL,
|
|
|
|
+ level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
|
|
+ return err;
|
|
|
|
|
|
if (base)
|
|
if (base)
|
|
base += son->offset;
|
|
base += son->offset;
|
|
@@ -735,13 +738,14 @@ int decode_choice(bitstr_t * bs, field_t * f, char *base, int level)
|
|
}
|
|
}
|
|
beg = bs->cur;
|
|
beg = bs->cur;
|
|
|
|
|
|
- if ((err = (Decoders[son->type]) (bs, son, base, level + 1)) >
|
|
|
|
- H323_ERROR_STOP)
|
|
|
|
|
|
+ if ((err = (Decoders[son->type]) (bs, son, base, level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
bs->cur = beg + len;
|
|
bs->cur = beg + len;
|
|
bs->bit = 0;
|
|
bs->bit = 0;
|
|
- } else if ((err = (Decoders[son->type]) (bs, son, base, level + 1)))
|
|
|
|
|
|
+ } else if ((err = (Decoders[son->type]) (bs, son, base, level + 1)) <
|
|
|
|
+ H323_ERROR_NONE)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
return H323_ERROR_NONE;
|
|
return H323_ERROR_NONE;
|