diff options
author | Wilker Aziz <will.aziz@gmail.com> | 2015-02-19 08:52:16 +0000 |
---|---|---|
committer | Wilker Aziz <will.aziz@gmail.com> | 2015-02-19 08:52:16 +0000 |
commit | 48099f37a36ff3a198c36e881159b14291f8309f (patch) | |
tree | 598de467ee2d5c39bef0252bee95a36cd4a1a6bc | |
parent | 0abf34b3bf216b041dab3c338f9ac263d912376c (diff) |
when ApplyRules resizes nodes_, the reference to `cat` may become invalid and the parser segfaults (observed with grammars full of unary rules)
-rw-r--r-- | decoder/bottom_up_parser.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/decoder/bottom_up_parser.cc b/decoder/bottom_up_parser.cc index a614b8b3..7ce8e09d 100644 --- a/decoder/bottom_up_parser.cc +++ b/decoder/bottom_up_parser.cc @@ -274,7 +274,7 @@ void PassiveChart::ApplyRules(const int i, void PassiveChart::ApplyUnaryRules(const int i, const int j) { const vector<int>& nodes = chart_(i,j); // reference is important! for (unsigned di = 0; di < nodes.size(); ++di) { - const WordID& cat = forest_->nodes_[nodes[di]].cat_; + const WordID cat = forest_->nodes_[nodes[di]].cat_; for (unsigned ri = 0; ri < unaries_.size(); ++ri) { //cerr << "At (" << i << "," << j << "): applying " << unaries_[ri]->AsString() << endl; if (unaries_[ri]->f()[0] == cat) { |