From 62deb833943f21bde0da66be7b5213ee6c651d48 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 30 Jan 2025 02:47:09 +0000 Subject: [PATCH] bcode: reject unsorted dictionary keys --- bcode.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bcode.c b/bcode.c index 1264e70..ff8ae82 100644 --- a/bcode.c +++ b/bcode.c @@ -337,6 +337,10 @@ parse_dictionary(struct bcode_dictionary *d, const uint8_t *dp, size_t sz) dp += n; consumed += n; + if (d->sz > 0 && + kv_cmp(&d->elems[d->sz - 1], &d->elems[d->sz]) >= 0) + return 0; + n = parse_internal(&d->elems[d->sz].v, dp, sz); if (n == 0) return 0; @@ -372,11 +376,8 @@ parse_internal(struct bcode *bcode, const uint8_t *dp, size_t sz) break; case 'd': n = parse_dictionary(&bcode->dictionary, dp, sz); - if (n > 0) { - qsort(bcode->dictionary.elems, bcode->dictionary.sz, - sizeof(*bcode->dictionary.elems), &kv_cmp); + if (n > 0) bcode->type = BCODE_DICTIONARY; - } break; default: n = parse_string(&bcode->string, dp, sz);