From 83ca0db6bbfd560b3dcf9a73013bd02f094e86e1 Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Fri, 20 Jan 2017 00:39:24 +0200 Subject: [PATCH] [fbreader] Improved handling of broken CSS input Particularly, curly brackets in inline CSS would make the parser crash. Generally, it's better to stop parsing than crash when we get into an unexpected state. --- .../fbreader/fbreader/src/formats/css/StyleSheetParser.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fbreader/fbreader/fbreader/src/formats/css/StyleSheetParser.cpp b/fbreader/fbreader/fbreader/src/formats/css/StyleSheetParser.cpp index 01e2ba7..ec090a3 100644 --- a/fbreader/fbreader/fbreader/src/formats/css/StyleSheetParser.cpp +++ b/fbreader/fbreader/fbreader/src/formats/css/StyleSheetParser.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2004-2010 Geometer Plus - * Copyright (C) 2015 Slava Monich + * Copyright (C) 2015-2017 Slava Monich * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -90,7 +90,7 @@ void StyleSheetParser::parse(ZLInputStream &stream) { void StyleSheetParser::parse(const char *text, int len, bool final) { const char *start = text; const char *end = text + len; - for (const char *ptr = start; ptr != end; ++ptr) { + for (const char *ptr = start; ptr != end && !myStateStack.empty(); ++ptr) { processChar1(*ptr); } } @@ -220,6 +220,9 @@ void StyleSheetParser::processChar4(char c) { case ';': finishAttribute(); break; + case '{': + myStateStack.push(SKIP_BLOCK_CURLY); + break; case '}': finishRule(); myStateStack.pop();