From ea46bae631c831549914cdcf5bedc11a3b591180 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 24 May 2010 11:07:30 -0500 Subject: simutil: Simplify ber_tlv builder set_length logic --- src/simutil.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/simutil.c b/src/simutil.c index d7d38d55..2509cccd 100644 --- a/src/simutil.c +++ b/src/simutil.c @@ -566,22 +566,15 @@ gboolean ber_tlv_builder_next(struct ber_tlv_builder *builder, { if (builder->tag != 0xff) { ber_tlv_builder_write_header(builder); - builder->pos += MAX_BER_TLV_HEADER + builder->len; } - if (builder->pos + MAX_BER_TLV_HEADER > builder->max) + if (ber_tlv_builder_set_length(builder, 0) == FALSE) return FALSE; - if (builder->parent) - if (ber_tlv_builder_set_length(builder->parent, builder->pos + - MAX_BER_TLV_HEADER) == FALSE) - return FALSE; - builder->class = class; builder->encoding = encoding; builder->tag = new_tag; - builder->len = 0; return TRUE; } @@ -591,14 +584,13 @@ gboolean ber_tlv_builder_next(struct ber_tlv_builder *builder, gboolean ber_tlv_builder_set_length(struct ber_tlv_builder *builder, unsigned int new_len) { - if (builder->pos + MAX_BER_TLV_HEADER + new_len > builder->max) + unsigned int new_pos = builder->pos + MAX_BER_TLV_HEADER + new_len; + + if (new_pos > builder->max) return FALSE; if (builder->parent) - if (ber_tlv_builder_set_length(builder->parent, - builder->pos + MAX_BER_TLV_HEADER + - new_len) == FALSE) - return FALSE; + ber_tlv_builder_set_length(builder->parent, new_pos); builder->len = new_len; -- cgit v1.2.3