From b95b66464430843e2c91565ace7d25d78f7f13f8 Mon Sep 17 00:00:00 2001 From: Andreas Steffen Date: Sun, 5 Oct 2014 22:52:59 +0200 Subject: [PATCH] Incremental parsing fixes --- src/libimcv/ietf/ietf_attr_installed_packages.c | 15 +++++---------- src/libimcv/tcg/swid/tcg_swid_attr_tag_inv.c | 8 ++++---- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/libimcv/ietf/ietf_attr_installed_packages.c b/src/libimcv/ietf/ietf_attr_installed_packages.c index 155a7826c..39eea555a 100644 --- a/src/libimcv/ietf/ietf_attr_installed_packages.c +++ b/src/libimcv/ietf/ietf_attr_installed_packages.c @@ -203,7 +203,8 @@ METHOD(pa_tnc_attr_t, process, status_t, while (this->count) { - if (!reader->read_data8(reader, &name)) + if (!reader->read_data8(reader, &name) || + !reader->read_data8(reader, &version)) { goto end; } @@ -215,21 +216,15 @@ METHOD(pa_tnc_attr_t, process, status_t, status = FAILED; goto end; } - this->offset += 1 + name.len; - - if (!reader->read_data8(reader, &version)) - { - goto end; - } pos = memchr(version.ptr, '\0', version.len); if (pos) { DBG1(DBG_TNC, "nul termination in IETF installed package version"); - *offset = this->offset + 1 + (pos - version.ptr); + *offset = this->offset + 1 + name.len + 1 + (pos - version.ptr); status = FAILED; goto end; } - this->offset += 1 + version.len; + this->offset += this->value.len - reader->remaining(reader); this->value = reader->peek(reader); entry = malloc_thing(package_entry_t); @@ -326,7 +321,7 @@ METHOD(ietf_attr_installed_packages_t, clear_packages, void, { package_entry_t *entry; - while (this->packages->remove_first(this->packages,(void**)&entry)) + while (this->packages->remove_first(this->packages,(void**)&entry) == SUCCESS) { free_package_entry(entry); } diff --git a/src/libimcv/tcg/swid/tcg_swid_attr_tag_inv.c b/src/libimcv/tcg/swid/tcg_swid_attr_tag_inv.c index ade0ca8a0..013482441 100644 --- a/src/libimcv/tcg/swid/tcg_swid_attr_tag_inv.c +++ b/src/libimcv/tcg/swid/tcg_swid_attr_tag_inv.c @@ -189,8 +189,8 @@ METHOD(pa_tnc_attr_t, process, status_t, { if (this->length < TCG_SWID_TAG_INV_MIN_SIZE) { - DBG1(DBG_TNC, "insufficient data for %N", tcg_attr_names, - this->type.type); + DBG1(DBG_TNC, "insufficient data for %N/%N", pen_names, PEN_TCG, + tcg_attr_names, this->type.type); *offset = this->offset; return FAILED; } @@ -230,8 +230,8 @@ METHOD(pa_tnc_attr_t, process, status_t, if (this->length != this->offset) { - DBG1(DBG_TNC, "inconsistent length for %N", tcg_attr_names, - this->type.type); + DBG1(DBG_TNC, "inconsistent length for %N/%N", pen_names, PEN_TCG, + tcg_attr_names, this->type.type); *offset = this->offset; status = FAILED; }