aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/encoding/parser.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-06-17 13:38:05 +0200
committerMartin Willi <martin@strongswan.org>2009-06-17 13:38:05 +0200
commit80d3a187c5b8d0ea0e88296c48dddaecece837a2 (patch)
tree27001569988f2208648a5e4985ba74eb9a85f4d8 /src/charon/encoding/parser.c
parentdf2565a2d57929f68b6de06e1e4475e605a6acff (diff)
downloadstrongswan-80d3a187c5b8d0ea0e88296c48dddaecece837a2.tar.bz2
strongswan-80d3a187c5b8d0ea0e88296c48dddaecece837a2.tar.xz
double check that parsing a list consumes all bytes
Diffstat (limited to 'src/charon/encoding/parser.c')
-rw-r--r--src/charon/encoding/parser.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/charon/encoding/parser.c b/src/charon/encoding/parser.c
index 3e333f76d..76ae32fb9 100644
--- a/src/charon/encoding/parser.c
+++ b/src/charon/encoding/parser.c
@@ -329,6 +329,12 @@ static bool parse_list(private_parser_t *this, int rule_number,
list->insert_last(list, payload);
length -= this->byte_pos - pos_before;
}
+ if (length != 0)
+ { /* must yield exactly to zero */
+ DBG1(DBG_ENC, " length of %N substructure list invalid",
+ payload_type_names, payload_type);
+ return FALSE;
+ }
*output_pos = list;
return TRUE;
}