Commit 0753113a authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qjson: Don't crash when input exceeds nesting limit



We limit nesting depth and input size to defend against input
triggering excessive heap or stack memory use (commit 29c75ddd
json-streamer: limit the maximum recursion depth and maximum token
count).  However, when the nesting limit is exceeded,
parser_context_peek_token()'s assertion fails.

Broken in commit 65c0f1e9 "json-parser: don't replicate tokens at each
level of recursion".

To reproduce stuff 1025 open braces or brackets into QMP.

Fix by taking the error exit instead of the normal one.

Reported-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1448486613-17634-3-git-send-email-armbru@redhat.com>
parent 4f2d31fb
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -68,13 +68,14 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok
        /* Security consideration, we limit total memory allocated per object
         * and the maximum recursion depth that a message can force.
         */
        goto out_emit;
        goto out_emit_bad;
    }

    return;

out_emit_bad:
    /* clear out token list and tell the parser to emit and error
    /*
     * Clear out token list and tell the parser to emit an error
     * indication by passing it a NULL list
     */
    QDECREF(parser->tokens);