aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-03-13 14:20:35 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-03-16 18:07:32 +0100
commit9e2f53295699aea8f0333ae0acba35d26a3a58c0 (patch)
tree63541c8d3d29047046278d466d6b9ce11c6a5d07
parent2ae78885e8a5e7039972fef39cdd13a210cb5806 (diff)
downloadsciteco-9e2f53295699aea8f0333ae0acba35d26a3a58c0.tar.gz
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
-rw-r--r--src/qregisters.cpp10
1 files changed, 10 insertions, 0 deletions
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];