We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
Trying to convert a simple JSON type into a class using the instructions provided in the README.
When the from_json code is called, it seems to successfully run the function, but segfaults in a string copy assignment/operator.
Here is the class and the code to convert:
class ExampleJsonConvert { public: std::string a; int b; float c; }; void from_json(const nlohmann::json& j, ExampleJsonConvert& p) { j.at("a").get_to(p.a); j.at("b").get_to(p.b); j.at("c").get_to(p.c); }
The callback is invoked with the following template:
template <typename T> int GenericJsonConverter(std::string json_str, void *output) { try { T *conv = reinterpret_cast<T*>(output); nlohmann::json json_obj = nlohmann::json::parse(json_str); *conv = json_obj; } catch (const nlohmann::json::parse_error &e) { printf("Failed to parse payload from PubSub message: %s, exception:%s", json_str.c_str(), e.what()); return -1; } catch (const nlohmann::detail::type_error &e) { printf("Failed to parse type from PubSub message: %s, exception: %s", json_str.c_str(), e.what()); return -1; } return 0; } GenericJsonConverter<ExampleJsonConvert>(j["payload"].dump(), mybuffer);
The JSON being passed in is as follows:
{ "hdr" : {"module": "_ANY_", "core": 0, "name": "none"}, "payload" : {"a": "test", "b":1, "c":2.0} }
When hitting the callback, I put a print statement after the j.at("c").get_to(p.c); line, and it succeeds, but the stack trace shows:
j.at("c").get_to(p.c);
#0 0x00007fffe0597b6a in ?? () #1 0x0000555556553a9b in std::char_traits<char>::copy (__n=4, __s2=<optimized out>, __s1=<optimized out>) at /usr/include/c++/7/bits/char_traits.h:350 #2 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy (__n=4, __s=<optimized out>, __d=<optimized out>) at /usr/include/c++/7/bits/basic_string.h:340 #3 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign (this=this@entry=0x1996f2510, __str=...) at /usr/include/c++/7/bits/basic_string.tcc:272 #4 0x00005555567c1afb in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign (__str=..., this=0x1996f2510) at /usr/include/c++/7/bits/basic_string.h:1347 #5 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator= (__str=..., this=0x1996f2510) at /usr/include/c++/7/bits/basic_string.h:766 #6 TestBed::ExampleJsonConvert::operator= (this=0x1996f2510) at ./src/RPC/interfaces/json_converters/CommonConverters.h:8 #7 TestBed::GenericJsonConverter<TestBed::ExampleJsonConvert> (json_str=..., output=0x1996f2510) at ./src/RPC/interfaces/json_converters/ConverterUtilities.h:16
See above
No crash
Crash
The text was updated successfully, but these errors were encountered:
Nevermind, issue with std::string allocating heap memory.
Sorry, something went wrong.
No branches or pull requests
Trying to convert a simple JSON type into a class using the instructions provided in the README.
What is the issue you have?
When the from_json code is called, it seems to successfully run the function, but segfaults in a string copy assignment/operator.
Please describe the steps to reproduce the issue.
Here is the class and the code to convert:
The callback is invoked with the following template:
The JSON being passed in is as follows:
When hitting the callback, I put a print statement after the
j.at("c").get_to(p.c);
line, and it succeeds, but the stack trace shows:Can you provide a small but working code example?
See above
What is the expected behavior?
No crash
And what is the actual behavior instead?
Crash
Which compiler and operating system are you using?
Which version of the library did you use?
Ubuntu 18.04
gcc 7.3.0
The text was updated successfully, but these errors were encountered: