From 8c5f554406a63ceafa2829ec6b5b36260883b9a3 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Tue, 14 May 2019 23:51:21 -0400 Subject: [PATCH] Add guard against a rare crash in the C tokenizer --- CHANGELOG | 5 +++-- docs/changelog.rst | 5 +++-- mwparserfromhell/parser/ctokenizer/tok_parse.c | 6 ++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 918c37f..a37680d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ -v0.6 (unreleased): +v0.5.4 (unreleased): -- ... +- Fixed an unlikely crash in the C tokenizer when interrupted while parsing + a heading. v0.5.3 (released March 30, 2019): diff --git a/docs/changelog.rst b/docs/changelog.rst index a18c7f8..bb81c42 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,13 +1,14 @@ Changelog ========= -v0.6 +v0.5.4 ---- Unreleased (`changes `__): -- ... +- Fixed an unlikely crash in the C tokenizer when interrupted while parsing + a heading. v0.5.3 ------ diff --git a/mwparserfromhell/parser/ctokenizer/tok_parse.c b/mwparserfromhell/parser/ctokenizer/tok_parse.c index ab46252..c32e48c 100644 --- a/mwparserfromhell/parser/ctokenizer/tok_parse.c +++ b/mwparserfromhell/parser/ctokenizer/tok_parse.c @@ -813,6 +813,9 @@ static int Tokenizer_parse_heading(Tokenizer* self) self->global ^= GL_HEADING; return 0; } + if (!heading) { + return -1; + } #ifdef IS_PY3K level = PyLong_FromSsize_t(heading->level); #else @@ -892,6 +895,9 @@ static HeadingData* Tokenizer_handle_heading_end(Tokenizer* self) self->head = reset + best - 1; } else { + if (!after) { + return NULL; + } for (i = 0; i < best; i++) { if (Tokenizer_emit_char(self, '=')) { Py_DECREF(after->title);