From 9e2f53295699aea8f0333ae0acba35d26a3a58c0 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Wed, 13 Mar 2013 14:20:35 +0100 Subject: fixed: prevent accessing registers in parse-only mode * they might not already exist, yielding bogus errors * in case the register might be initialized we do not want to do so in parse-only-mode * this fix is only a workaround: currently we must return a register sind got_register() expects one and must be called to determine the next state in parse only mode * proper solution would be to better separate parsing and execution --- src/qregisters.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 05a3322..a35a6d6 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -408,6 +408,9 @@ StateString: break; } + if (mode > MODE_NORMAL) + return NULL; + insert = string_machine.input(chr); if (!insert) return NULL; @@ -418,6 +421,13 @@ StateString: return NULL; done: + if (mode > MODE_NORMAL) + /* + * FIXME: currently we must return *some* register + * since got_register() expects one + */ + return QRegisters::globals["0"]; + QRegisterTable &table = is_local ? *QRegisters::locals : QRegisters::globals; QRegister *reg = table[name]; -- cgit v1.2.3