Skip to content

Commit 0ac360e

Browse files
committed
Description: Clear signal_name and value descriptions
Reason: otherwise the next will always be added which is wrong Files: dbc.cpp
1 parent 599f7b6 commit 0ac360e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/dbc.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ struct VALObject {
4343
};
4444

4545
bool parseVal(const std::string& str, VALObject& obj) {
46+
obj.signal_name = "";
47+
obj.vd.clear();
4648
auto state = Identifier;
4749
const char* a = str.data();
4850
libdbc::Signal::SignalValueDescriptions vd;

test/test_dbc.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,42 @@ VAL_ 3221225472 State1 123 "Description 1" 0 "Description 2" 4000000000 "Big val
214214
REQUIRE(signal.svDescriptions.at(2).description == "Big value and special characters &$§())!");
215215

216216
}
217+
218+
TEST_CASE("Signal Value Multiple VAL_") {
219+
/*
220+
* It should not crash, even extended CAN id is used
221+
*/
222+
const auto* filename = std::tmpnam(NULL);
223+
224+
create_tmp_dbc_with(filename, R"(BO_ 3221225472 MSG1: 8 Vector__XXX
225+
SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
226+
SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3"
227+
BO_ 123 MSG1: 8 Vector__XXX
228+
SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
229+
SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3
230+
VAL_ 3221225472 State1 123 "Description 1" 0 "Description 2"
231+
VAL_ 123 State1 123 "Description 3" 0 "Description 4")");
232+
233+
234+
auto parser = libdbc::DbcParser();
235+
parser.parse_file(filename);
236+
237+
REQUIRE(parser.get_messages().size() == 1);
238+
REQUIRE(parser.get_messages().at(0).getSignals().size() == 2);
239+
240+
REQUIRE(parser.get_messages().at(0).getSignals().at(0).svDescriptions.size() == 2);
241+
REQUIRE(parser.get_messages().at(0).getSignals().at(1).svDescriptions.size() == 2);
242+
243+
const auto signal = parser.get_messages().at(0).getSignals().at(0);
244+
REQUIRE(signal.svDescriptions.at(0).value == 123);
245+
REQUIRE(signal.svDescriptions.at(0).description == "Description 1");
246+
REQUIRE(signal.svDescriptions.at(1).value == 0);
247+
REQUIRE(signal.svDescriptions.at(1).description == "Description 2");
248+
249+
const auto signal2 = parser.get_messages().at(0).getSignals().at(0);
250+
REQUIRE(signal2.svDescriptions.at(0).value == 123);
251+
REQUIRE(signal2.svDescriptions.at(0).description == "Description 3");
252+
REQUIRE(signal2.svDescriptions.at(1).value == 0);
253+
REQUIRE(signal2.svDescriptions.at(1).description == "Description 4");
254+
255+
}

0 commit comments

Comments
 (0)