Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segmentation fault when Node not recognized #931

Open
kgilarski opened this issue Feb 7, 2025 · 3 comments
Open

Segmentation fault when Node not recognized #931

kgilarski opened this issue Feb 7, 2025 · 3 comments
Assignees
Labels
bug Something isn't working need more info

Comments

@kgilarski
Copy link

There is a segmentation fault when using createTreeFromText with text containing unrecognized (unregistered) node.

The problem is in the current master branch. Branch 4.6.2 throws in such a case an exception:
Error at line X: -> Node not recognized: Y

Backtrace:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fa9b9dd1aaa in BT::VerifyXML(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, BT::NodeType, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, BT::NodeType> > > const&)::{lambda(tinyxml2::XMLElement const*)#2}::operator()(tinyxml2::XMLElement const*) const () from /usr/local/lib/libbehaviortree_cpp.so
[Current thread is 1 (Thread 0x7fa9b3fff6c0 (LWP 10))]
#0  0x00007fa9b9dd1aaa in BT::VerifyXML(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, BT::NodeType, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, BT::NodeType> > > const&)::{lambda(tinyxml2::XMLElement const*)#2}::operator()(tinyxml2::XMLElement const*) const () from /usr/local/lib/libbehaviortree_cpp.so
#1  0x00007fa9b9dd1670 in BT::VerifyXML(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, BT::NodeType, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, BT::NodeType> > > const&)::{lambda(tinyxml2::XMLElement const*)#2}::operator()(tinyxml2::XMLElement const*) const () from /usr/local/lib/libbehaviortree_cpp.so
#2  0x00007fa9b9dd1670 in BT::VerifyXML(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, BT::NodeType, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, BT::NodeType> > > const&)::{lambda(tinyxml2::XMLElement const*)#2}::operator()(tinyxml2::XMLElement const*) const () from /usr/local/lib/libbehaviortree_cpp.so
#3  0x00007fa9b9dd79ac in BT::VerifyXML(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, BT::NodeType, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, BT::NodeType> > > const&) () from /usr/local/lib/libbehaviortree_cpp.so
#4  0x00007fa9b9dd82a3 in BT::XMLParser::PImpl::loadDocImpl(tinyxml2::XMLDocument*, bool) () from /usr/local/lib/libbehaviortree_cpp.so
#5  0x00007fa9b9d673ce in BT::BehaviorTreeFactory::createTreeFromText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<BT::Blackboard>) () from /usr/local/lib/libbehaviortree_cpp.so
@facontidavide facontidavide self-assigned this Feb 7, 2025
@facontidavide facontidavide added the bug Something isn't working label Feb 7, 2025
@facontidavide
Copy link
Collaborator

Thanks. Do you have an example that can reproduce the error?

@kgilarski
Copy link
Author

I can't provide an exact example, but I have prepared something which might help.

void execute(const string &xml) {
        BehaviorTreeFactory factory;
        auto tree_ptr = std::make_shared<BT::Tree>( factory.createTreeFromText( xml ));
}

where xml is as follows:
FED801.txt

The factory has registered 21 nodes using registerNodeType method but non of them is in the xml file.
The whole example is a situation when somebody delivers incorrect tree by mistake and we want to get an exception, not a segmentation fault.

facontidavide added a commit that referenced this issue Feb 9, 2025
@facontidavide
Copy link
Collaborator

i added a unit test, but i am not able to reproduce the error... 2793902

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working need more info
Projects
None yet
Development

No branches or pull requests

2 participants