This commit is contained in:
deeaitch committed 2026-10-23 20:48:21 -04:00
1 parent e44529007a
commit f60faea2e7
35 files changed
+2361 -2145

No files matched your search

+6 -2
View File
@@ -788,8 +788,12 @@ Parsed fields:
### Signal validation and parse errors
`SG_` statements are matched completely. Signal names must be nonempty and
contain no whitespace. Spaces and tabs are accepted between syntax elements;
`SG_` statements are read completely with an iterative scanner. Signal parsing
and numeric conversion do not use recursive regular-expression matching, so long
fields do not consume stack space proportional to their length. No new statement
length limit is imposed; valid long fields are preserved, and malformed statements
return the usual source diagnostics. Signal names must be nonempty and contain no
whitespace. Spaces and tabs are accepted between syntax elements;
byte order and signedness remain adjacent (`@0+`, `@0-`, `@1+`, or `@1-`).
A quoted unit (which may be empty) and a nonempty comma-separated receiver
list are required. Unexpected trailing fields are rejected.
+14
View File
@@ -34,6 +34,20 @@ existing Git tag; subsequent changes are listed as unreleased.
#### Fixed
- Replace recursive regular-expression matching for `SG_` statements with an
iterative field scanner. Long unit strings no longer overflow the stack.
- Parse signal physical values directly with locale-independent `from_chars`,
retaining complete-token, finite-value, overflow, and underflow validation
without recursive numeric regex matching.
- Preserve long valid fields without a new length limit, and reject malformed
statements through the existing source-located diagnostic and throwing APIs.
- Add parser regressions for 50,000-character fields, large receiver lists,
malformed syntax, and numeric errors. Verify Release and ASan/UBSan builds
with the optional Qt adapter: 2,409 core checks, seven model checks, and the
qmake tree test pass in each build. One named-locale test skips because its
locale is unavailable; local sanitizer leak checking remains disabled due
to the documented ptrace restriction.
- Read attribute definitions, defaults, and assignments across physical lines.
Preserve quoted newlines and semicolons, and report attribute errors and
unsupported frame formats at the statement's first physical line.
+79 -48
View File
@@ -33,9 +33,8 @@ namespace {
}
double ParsePhysicalValue(const std::string &text, const char *field) {
static const std::regex number(
R"(^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$)");
if (!std::regex_match(text, number))
if (text.empty() || (text[0] == '+' &&
(text.size() == 1U || text[1] == '+' || text[1] == '-')))
throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
// Floating-point from_chars is locale-independent and does not accept
// a leading '+', which the DBC numeric grammar permits.
@@ -53,6 +52,58 @@ namespace {
return value;
}
// Iterative scanning keeps stack use independent of the statement length.
class SignalTokens {
public:
SignalTokens(const std::string &text, std::size_t position) : text(text), position(position) {}
void SkipSpaces() {
while (position < text.size() && (text[position] == ' ' || text[position] == '\t'))
++position;
}
char Character() {
if (position == text.size())
throw std::runtime_error("Incomplete SG_ signal definition.");
return text[position++];
}
void Expect(char expected) {
SkipSpaces();
if (Character() != expected)
throw std::runtime_error("Malformed SG_ signal definition.");
}
std::string Until(char delimiter) {
const std::size_t end = text.find(delimiter, position);
if (end == std::string::npos)
throw std::runtime_error("Missing delimiter in SG_ signal definition.");
const std::string value = text.substr(position, end - position);
position = end + 1U;
return value;
}
std::vector<std::string> Receivers() {
if (position == text.size() || (text[position] != ' ' && text[position] != '\t'))
throw std::runtime_error("Missing receiver separator in SG_ signal definition.");
std::vector<std::string> receivers;
for (;;) {
const std::size_t end = text.find(',', position);
const std::string receiver = dbc_detail::TrimText(text.substr(position, end - position));
if (receiver.empty() || receiver.find_first_of(" \t\r\n") != std::string::npos)
throw std::runtime_error("Invalid SG_ receiver list.");
receivers.push_back(receiver);
if (end == std::string::npos)
return receivers;
position = end + 1U;
}
}
private:
const std::string &text;
std::size_t position = 0U;
};
Multiplexing ParseMultiplexingMarker(const std::string &marker) {
Multiplexing result;
if (marker == "M")
@@ -142,20 +193,6 @@ namespace {
} // namespace
namespace {
std::vector<std::string> SplitReceivers(const std::string &text) {
std::vector<std::string> receivers;
std::string token;
std::istringstream stream(text);
while (std::getline(stream, token, ',')) {
token = dbc_detail::TrimText(token);
if (!token.empty())
receivers.push_back(token);
}
return receivers;
}
void NormalizeCanId(std::uint32_t rawCanId, std::uint32_t &normalizedCanId, bool &isExtended) {
/*
* DBC commonly stores extended identifiers with bit 31 set.
@@ -206,28 +243,12 @@ FrameInfo DbcFrameHandler::ParseFrameLine(const std::string &line) {
}
SignalInfo DbcSignalHandler::ParseSignalLine(const std::string &line) {
// Match the complete statement before converting any numeric fields.
enum Field {
NameAndMarker = 1, StartBit, BitLength, ByteOrder, Signedness,
Factor, Offset, Minimum, Maximum, Unit, Receivers
};
static const std::regex syntax(
// Name and optional multiplexing marker.
R"dbc(^SG_[ \t]+([^:]+):[ \t]*)dbc"
// Bit position, length, byte order and signedness.
R"dbc(([^| \t]+)[ \t]*\|[ \t]*([^@ \t]+)[ \t]*@[ \t]*([01])([+-])[ \t]*)dbc"
// Scaling factor and offset.
R"dbc(\([ \t]*([^, \t]+)[ \t]*,[ \t]*([^ )\t]+)[ \t]*\)[ \t]*)dbc"
// Physical range.
R"dbc(\[[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^\] \t]+)[ \t]*\][ \t]*)dbc"
// Unit and receivers.
R"dbc("([^"\r\n]*)"[ \t]+([^ \t,]+(?:[ \t]*,[ \t]*[^ \t,]+)*)[ \t]*$)dbc");
std::smatch fields;
if (!std::regex_match(line, fields, syntax))
throw std::runtime_error("Malformed or unsupported SG_ signal definition.");
if (line.size() < 4U || line.compare(0U, 3U, "SG_") != 0 ||
(line[3] != ' ' && line[3] != '\t'))
throw std::runtime_error("Malformed SG_ signal definition.");
SignalTokens tokens(line, 3U);
SignalInfo signal;
std::istringstream nameFields(fields[NameAndMarker].str());
std::istringstream nameFields(tokens.Until(':'));
std::string marker;
std::string extra;
nameFields >> signal.name >> marker;
@@ -235,22 +256,32 @@ SignalInfo DbcSignalHandler::ParseSignalLine(const std::string &line) {
throw std::runtime_error("Invalid signal name or multiplexing marker.");
signal.multiplexing = ParseMultiplexingMarker(marker);
signal.startBit = ParseDecimal(fields[StartBit].str(),
signal.startBit = ParseDecimal(dbc_detail::TrimText(tokens.Until('|')),
std::numeric_limits<std::uint32_t>::max(), "signal start bit");
signal.length = ParseDecimal(fields[BitLength].str(), 64U, "signal length");
signal.length = ParseDecimal(dbc_detail::TrimText(tokens.Until('@')), 64U, "signal length");
if (signal.length == 0U)
throw std::runtime_error("Signal length must be within 1..64 bits.");
signal.isLittleEndian = fields[ByteOrder].str() == "1";
signal.isSigned = fields[Signedness].str() == "-";
tokens.SkipSpaces();
const char byteOrder = tokens.Character();
const char signedness = tokens.Character();
if ((byteOrder != '0' && byteOrder != '1') || (signedness != '+' && signedness != '-'))
throw std::runtime_error("Invalid SG_ byte order or signedness.");
signal.isLittleEndian = byteOrder == '1';
signal.isSigned = signedness == '-';
signal.factor = ParsePhysicalValue(fields[Factor].str(), "signal factor");
signal.offset = ParsePhysicalValue(fields[Offset].str(), "signal offset");
signal.minimum = ParsePhysicalValue(fields[Minimum].str(), "signal minimum");
signal.maximum = ParsePhysicalValue(fields[Maximum].str(), "signal maximum");
tokens.Expect('(');
signal.factor = ParsePhysicalValue(dbc_detail::TrimText(tokens.Until(',')), "signal factor");
signal.offset = ParsePhysicalValue(dbc_detail::TrimText(tokens.Until(')')), "signal offset");
tokens.Expect('[');
signal.minimum = ParsePhysicalValue(dbc_detail::TrimText(tokens.Until('|')), "signal minimum");
signal.maximum = ParsePhysicalValue(dbc_detail::TrimText(tokens.Until(']')), "signal maximum");
if (signal.minimum > signal.maximum)
throw std::runtime_error("Signal minimum exceeds maximum.");
signal.unit = fields[Unit].str();
signal.receivers = SplitReceivers(fields[Receivers].str());
tokens.Expect('"');
signal.unit = tokens.Until('"');
if (signal.unit.find_first_of("\r\n") != std::string::npos)
throw std::runtime_error("Invalid newline in SG_ unit.");
signal.receivers = tokens.Receivers();
return signal;
}
+1 -1
View File
@@ -158,7 +158,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">308</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">339</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00023">PendingComment::canId</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00027">PendingComment::comment</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00024">PendingComment::isExtended</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00025">PendingComment::isSignal</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00028">PendingComment::lineNumber</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00064">DbcParseContext::lineNumber</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00074">DbcParseContext::pendingComments</a>, and <a class="el" href="dbc__statement__handler_8h_source.html#l00026">PendingComment::signalName</a>.</p>
+1 -1
View File
@@ -158,7 +158,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">280</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">311</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="frame__info_8h_source.html#l00027">FrameInfo::canId</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00062">DbcParseContext::currentFrame</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00061">DbcParseContext::database</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00063">DbcParseContext::enableJ1939</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="frame__info_8h_source.html#l00030">FrameInfo::hasPgn</a>, <a class="el" href="frame__info_8h_source.html#l00028">FrameInfo::isExtended</a>, <a class="el" href="frame__info_8h_source.html#l00029">FrameInfo::pgn</a>, and <a class="el" href="dbc__statement__handler_8h_source.html#l00070">DbcParseContext::signalLines</a>.</p>
+1 -1
View File
@@ -155,7 +155,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00390">390</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00421">421</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
+1 -1
View File
@@ -158,7 +158,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00453">453</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00484">484</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00064">DbcParseContext::lineNumber</a>.</p>
+1 -1
View File
@@ -221,7 +221,7 @@ Public Member Functions</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__parser_8cpp_source.html#l00103">103</a> of file <a class="el" href="dbc__parser_8cpp_source.html">dbc_parser.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__diagnostic_8h_source.html#l00039">DbcParseResult::database</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00040">DbcDiagnosticError::diagnostic</a>, <a class="el" href="dbc__diagnostic_8h_source.html#l00040">DbcParseResult::diagnostics</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00392">DbcStatementDispatcher::Dispatch()</a>, and <a class="el" href="dbc__parser_8h_source.html#l00021">DbcParserOptions::enableJ1939</a>.</p>
<p class="reference">References <a class="el" href="dbc__diagnostic_8h_source.html#l00039">DbcParseResult::database</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00040">DbcDiagnosticError::diagnostic</a>, <a class="el" href="dbc__diagnostic_8h_source.html#l00040">DbcParseResult::diagnostics</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00423">DbcStatementDispatcher::Dispatch()</a>, and <a class="el" href="dbc__parser_8h_source.html#l00021">DbcParserOptions::enableJ1939</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__parser_8cpp_source.html#l00090">ParseFile()</a>.</p>
+1 -1
View File
@@ -158,7 +158,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">294</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">325</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00062">DbcParseContext::currentFrame</a>, <a class="el" href="frame__info_8h_source.html#l00031">FrameInfo::dlc</a>, <a class="el" href="signal__info_8h_source.html#l00030">SignalInfo::isLittleEndian</a>, <a class="el" href="signal__info_8h_source.html#l00029">SignalInfo::length</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00064">DbcParseContext::lineNumber</a>, <a class="el" href="frame__info_8h_source.html#l00026">FrameInfo::name</a>, <a class="el" href="signal__info_8h_source.html#l00027">SignalInfo::name</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00070">DbcParseContext::signalLines</a>, and <a class="el" href="signal__info_8h_source.html#l00028">SignalInfo::startBit</a>.</p>
+2 -2
View File
@@ -133,7 +133,7 @@ Public Member Functions</h2></td></tr>
<p>Register supported statement handlers through <a class="el" href="classTypeFactory.html" title="Registry-based factory for creating objects by runtime identifier.">TypeFactory</a>. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00372">372</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00403">403</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
@@ -199,7 +199,7 @@ template&lt;class Handler &gt; </div>
</div><div class="memdoc">
<p>Returns false for an unregistered keyword; input must be trimmed. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00392">392</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00423">423</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__parser_8cpp_source.html#l00103">DbcParser::ParseFileWithDiagnostics()</a>.</p>
@@ -158,7 +158,7 @@ Public Member Functions</h2></td></tr>
<p>Implements <a class="el" href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">404</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">435</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00014">PendingValueDescriptions::canId</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00017">PendingValueDescriptions::descriptions</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00015">PendingValueDescriptions::isExtended</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00018">PendingValueDescriptions::lineNumber</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00064">DbcParseContext::lineNumber</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00065">DbcParseContext::pendingValues</a>, and <a class="el" href="dbc__statement__handler_8h_source.html#l00016">PendingValueDescriptions::signalName</a>.</p>
@@ -993,7 +993,7 @@ $(document).ready(function(){initNavTree('dbc__coverage__test_8cpp_source.html',
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span>}</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span><span class="preprocessor">#include &quot;dbc_coverage_test.moc&quot;</span></div>
<div class="ttc" id="aclassDbcCommentHandler_html"><div class="ttname"><a href="classDbcCommentHandler.html">DbcCommentHandler</a></div><div class="ttdoc">Defer frame and signal comments for target resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00113">dbc_statement_handler.h:113</a></div></div>
<div class="ttc" id="aclassDbcCommentHandler_html_aa4fce77b585a441d251d8535ef7a51a6"><div class="ttname"><a href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">DbcCommentHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00308">dbc_statement_handler.cpp:308</a></div></div>
<div class="ttc" id="aclassDbcCommentHandler_html_aa4fce77b585a441d251d8535ef7a51a6"><div class="ttname"><a href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">DbcCommentHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00339">dbc_statement_handler.cpp:339</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html"><div class="ttname"><a href="classDbcDecodeBuilder.html">DbcDecodeBuilder</a></div><div class="ttdoc">Converts parsed DBC data into runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8h_source.html#l00021">dbc_decode_builder.h:21</a></div></div>
<div class="ttc" id="aclassDbcDecodeBuilder_html_a2bc6386dfb5e58976c42e22c19ec471b"><div class="ttname"><a href="classDbcDecodeBuilder.html#a2bc6386dfb5e58976c42e22c19ec471b">DbcDecodeBuilder::Build</a></div><div class="ttdeci">DecodeDatabase Build(const DbcDatabase &amp;source) const</div><div class="ttdoc">Build runtime decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decode__builder_8cpp_source.html#l00015">dbc_decode_builder.cpp:15</a></div></div>
<div class="ttc" id="aclassDbcDecoder_html"><div class="ttname"><a href="classDbcDecoder.html">DbcDecoder</a></div><div class="ttdoc">Runtime CAN decoder using prebuilt decode database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__decoder_8h_source.html#l00087">dbc_decoder.h:87</a></div></div>
@@ -1004,7 +1004,7 @@ $(document).ready(function(){initNavTree('dbc__coverage__test_8cpp_source.html',
<div class="ttc" id="aclassDbcTreeBuilder_html"><div class="ttname"><a href="classDbcTreeBuilder.html">DbcTreeBuilder</a></div><div class="ttdoc">Builds a simple tree from parsed DBC database.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8h_source.html#l00023">dbc_tree_builder.h:23</a></div></div>
<div class="ttc" id="aclassDbcTreeBuilder_html_a7e57d067d831b14b383947fd125edd4b"><div class="ttname"><a href="classDbcTreeBuilder.html#a7e57d067d831b14b383947fd125edd4b">DbcTreeBuilder::Build</a></div><div class="ttdeci">std::unique_ptr&lt; TreeNode &gt; Build(const DbcDatabase &amp;database) const</div><div class="ttdoc">Build tree representation of parsed DBC data.</div><div class="ttdef"><b>Definition</b> <a href="dbc__tree__builder_8cpp_source.html#l00014">dbc_tree_builder.cpp:14</a></div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html"><div class="ttname"><a href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</a></div><div class="ttdoc">Defer raw value descriptions for target resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00125">dbc_statement_handler.h:125</a></div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html_a653e13364f396b54244edc2c0fdd831a"><div class="ttname"><a href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">DbcValueDescriptionHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00404">dbc_statement_handler.cpp:404</a></div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html_a653e13364f396b54244edc2c0fdd831a"><div class="ttname"><a href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">DbcValueDescriptionHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00435">dbc_statement_handler.cpp:435</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html"><div class="ttname"><a href="classDecodeDatabase.html">DecodeDatabase</a></div><div class="ttdoc">Immutable runtime snapshot. Copies share storage; reload replaces a snapshot. Owning lookup handles a...</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8h_source.html#l00102">decode_database.h:102</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_a780d6e747a48b10a5eb0ab85448d2970"><div class="ttname"><a href="classDecodeDatabase.html#a780d6e747a48b10a5eb0ab85448d2970">DecodeDatabase::FindFrame</a></div><div class="ttdeci">std::shared_ptr&lt; const DecodeFrame &gt; FindFrame(const FrameKey &amp;key) const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00112">decode_database.cpp:112</a></div></div>
<div class="ttc" id="aclassDecodeDatabase_html_aa034c1510984a85f60ad6c0bd744d6e8"><div class="ttname"><a href="classDecodeDatabase.html#aa034c1510984a85f60ad6c0bd744d6e8">DecodeDatabase::GetFrames</a></div><div class="ttdeci">const std::vector&lt; DecodeFrame &gt; &amp; GetFrames() const</div><div class="ttdef"><b>Definition</b> <a href="decode__database_8cpp_source.html#l00107">decode_database.cpp:107</a></div></div>
+1 -1
View File
@@ -282,7 +282,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp_source.html',''); ini
<div class="ttc" id="aclassDbcParser_html_a0e915ce79c2e3d4c95a5aaf2bf0409bc"><div class="ttname"><a href="classDbcParser.html#a0e915ce79c2e3d4c95a5aaf2bf0409bc">DbcParser::ParseFileWithDiagnostics</a></div><div class="ttdeci">DbcParseResult ParseFileWithDiagnostics(const std::string &amp;filePath) const</div><div class="ttdoc">Parse with warnings and a structured first error instead of throwing.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00103">dbc_parser.cpp:103</a></div></div>
<div class="ttc" id="aclassDbcParser_html_aef72826942c9095d653fafa435855e56"><div class="ttname"><a href="classDbcParser.html#aef72826942c9095d653fafa435855e56">DbcParser::ParseFile</a></div><div class="ttdeci">DbcDatabase ParseFile(const std::string &amp;filePath) const</div><div class="ttdoc">Parse DBC file.</div><div class="ttdef"><b>Definition</b> <a href="dbc__parser_8cpp_source.html#l00090">dbc_parser.cpp:90</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00143">dbc_statement_handler.h:143</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00392">dbc_statement_handler.cpp:392</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00423">dbc_statement_handler.cpp:423</a></div></div>
<div class="ttc" id="adbc__parser_8h_html"><div class="ttname"><a href="dbc__parser_8h.html">dbc_parser.h</a></div><div class="ttdoc">DBC file parser and interpretation options.</div></div>
<div class="ttc" id="astructDbcDatabase_html"><div class="ttname"><a href="structDbcDatabase.html">DbcDatabase</a></div><div class="ttdoc">Parsed DBC content stored in a simple internal form.</div><div class="ttdef"><b>Definition</b> <a href="dbc__database_8h_source.html#l00022">dbc_database.h:22</a></div></div>
<div class="ttc" id="astructDbcDiagnostic_html"><div class="ttname"><a href="structDbcDiagnostic.html">DbcDiagnostic</a></div><div class="ttdoc">Diagnostic message and physical source location.</div><div class="ttdef"><b>Definition</b> <a href="dbc__diagnostic_8h_source.html#l00029">dbc_diagnostic.h:29</a></div></div>
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -274,26 +274,26 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8h_source.html
<div class="ttc" id="aclassDbcAttributeHandler_html"><div class="ttname"><a href="classDbcAttributeHandler.html">DbcAttributeHandler</a></div><div class="ttdoc">Defer typed attribute statements for resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00119">dbc_statement_handler.h:119</a></div></div>
<div class="ttc" id="aclassDbcAttributeHandler_html_a397f23259b7ff79abb4b5141489caa83"><div class="ttname"><a href="classDbcAttributeHandler.html#a397f23259b7ff79abb4b5141489caa83">DbcAttributeHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__attributes_8cpp_source.html#l00255">dbc_attributes.cpp:255</a></div></div>
<div class="ttc" id="aclassDbcCommentHandler_html"><div class="ttname"><a href="classDbcCommentHandler.html">DbcCommentHandler</a></div><div class="ttdoc">Defer frame and signal comments for target resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00113">dbc_statement_handler.h:113</a></div></div>
<div class="ttc" id="aclassDbcCommentHandler_html_aa4fce77b585a441d251d8535ef7a51a6"><div class="ttname"><a href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">DbcCommentHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00308">dbc_statement_handler.cpp:308</a></div></div>
<div class="ttc" id="aclassDbcCommentHandler_html_aa4fce77b585a441d251d8535ef7a51a6"><div class="ttname"><a href="classDbcCommentHandler.html#aa4fce77b585a441d251d8535ef7a51a6">DbcCommentHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00339">dbc_statement_handler.cpp:339</a></div></div>
<div class="ttc" id="aclassDbcDiagnosticError_html"><div class="ttname"><a href="classDbcDiagnosticError.html">DbcDiagnosticError</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00032">dbc_statement_handler.h:32</a></div></div>
<div class="ttc" id="aclassDbcDiagnosticError_html_aa9997368f79a9a0723481aaeffc44618"><div class="ttname"><a href="classDbcDiagnosticError.html#aa9997368f79a9a0723481aaeffc44618">DbcDiagnosticError::DbcDiagnosticError</a></div><div class="ttdeci">DbcDiagnosticError(DbcDiagnosticCode code, const std::string &amp;filePath, std::size_t lineNumber, const std::string &amp;message)</div><div class="ttdoc">Create an exception with a structured source diagnostic.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00035">dbc_statement_handler.h:35</a></div></div>
<div class="ttc" id="aclassDbcDiagnosticError_html_ab3965082f01d66b6d5c20525af44235d"><div class="ttname"><a href="classDbcDiagnosticError.html#ab3965082f01d66b6d5c20525af44235d">DbcDiagnosticError::diagnostic</a></div><div class="ttdeci">DbcDiagnostic diagnostic</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00040">dbc_statement_handler.h:40</a></div></div>
<div class="ttc" id="aclassDbcFrameHandler_html"><div class="ttname"><a href="classDbcFrameHandler.html">DbcFrameHandler</a></div><div class="ttdoc">Parse and append frame definitions.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00095">dbc_statement_handler.h:95</a></div></div>
<div class="ttc" id="aclassDbcFrameHandler_html_a0d3f43bbcc5e191460bc31827e74ce89"><div class="ttname"><a href="classDbcFrameHandler.html#a0d3f43bbcc5e191460bc31827e74ce89">DbcFrameHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00280">dbc_statement_handler.cpp:280</a></div></div>
<div class="ttc" id="aclassDbcFrameHandler_html_a0d3f43bbcc5e191460bc31827e74ce89"><div class="ttname"><a href="classDbcFrameHandler.html#a0d3f43bbcc5e191460bc31827e74ce89">DbcFrameHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00311">dbc_statement_handler.cpp:311</a></div></div>
<div class="ttc" id="aclassDbcHeaderHandler_html"><div class="ttname"><a href="classDbcHeaderHandler.html">DbcHeaderHandler</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00137">dbc_statement_handler.h:137</a></div></div>
<div class="ttc" id="aclassDbcHeaderHandler_html_a1e43a9dcf157f4d4418032d9e9711693"><div class="ttname"><a href="classDbcHeaderHandler.html#a1e43a9dcf157f4d4418032d9e9711693">DbcHeaderHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00390">dbc_statement_handler.cpp:390</a></div></div>
<div class="ttc" id="aclassDbcHeaderHandler_html_a1e43a9dcf157f4d4418032d9e9711693"><div class="ttname"><a href="classDbcHeaderHandler.html#a1e43a9dcf157f4d4418032d9e9711693">DbcHeaderHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00421">dbc_statement_handler.cpp:421</a></div></div>
<div class="ttc" id="aclassDbcMultiplexingHandler_html"><div class="ttname"><a href="classDbcMultiplexingHandler.html">DbcMultiplexingHandler</a></div><div class="ttdoc">Parse extended multiplexing conditions for deferred resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00131">dbc_statement_handler.h:131</a></div></div>
<div class="ttc" id="aclassDbcMultiplexingHandler_html_a16f9e9f898640200477d2dcc8bab442e"><div class="ttname"><a href="classDbcMultiplexingHandler.html#a16f9e9f898640200477d2dcc8bab442e">DbcMultiplexingHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00453">dbc_statement_handler.cpp:453</a></div></div>
<div class="ttc" id="aclassDbcMultiplexingHandler_html_a16f9e9f898640200477d2dcc8bab442e"><div class="ttname"><a href="classDbcMultiplexingHandler.html#a16f9e9f898640200477d2dcc8bab442e">DbcMultiplexingHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00484">dbc_statement_handler.cpp:484</a></div></div>
<div class="ttc" id="aclassDbcSignalHandler_html"><div class="ttname"><a href="classDbcSignalHandler.html">DbcSignalHandler</a></div><div class="ttdoc">Parse and append signals to the current frame.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00104">dbc_statement_handler.h:104</a></div></div>
<div class="ttc" id="aclassDbcSignalHandler_html_ad7d891ec1414fb645f85ccd410f2737b"><div class="ttname"><a href="classDbcSignalHandler.html#ad7d891ec1414fb645f85ccd410f2737b">DbcSignalHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00294">dbc_statement_handler.cpp:294</a></div></div>
<div class="ttc" id="aclassDbcSignalHandler_html_ad7d891ec1414fb645f85ccd410f2737b"><div class="ttname"><a href="classDbcSignalHandler.html#ad7d891ec1414fb645f85ccd410f2737b">DbcSignalHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00325">dbc_statement_handler.cpp:325</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html"><div class="ttname"><a href="classDbcStatementDispatcher.html">DbcStatementDispatcher</a></div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00143">dbc_statement_handler.h:143</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a2c6e9a614ed747275d43bcccc50d0b2d"><div class="ttname"><a href="classDbcStatementDispatcher.html#a2c6e9a614ed747275d43bcccc50d0b2d">DbcStatementDispatcher::RegisterType</a></div><div class="ttdeci">void RegisterType(const std::string &amp;keyword)</div><div class="ttdoc">Register or replace a handler and create its reusable instance.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00150">dbc_statement_handler.h:150</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a2f064359b59d8644b8a8196653d47482"><div class="ttname"><a href="classDbcStatementDispatcher.html#a2f064359b59d8644b8a8196653d47482">DbcStatementDispatcher::DbcStatementDispatcher</a></div><div class="ttdeci">DbcStatementDispatcher()</div><div class="ttdoc">Register supported statement handlers through TypeFactory.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00372">dbc_statement_handler.cpp:372</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00392">dbc_statement_handler.cpp:392</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a2f064359b59d8644b8a8196653d47482"><div class="ttname"><a href="classDbcStatementDispatcher.html#a2f064359b59d8644b8a8196653d47482">DbcStatementDispatcher::DbcStatementDispatcher</a></div><div class="ttdeci">DbcStatementDispatcher()</div><div class="ttdoc">Register supported statement handlers through TypeFactory.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00403">dbc_statement_handler.cpp:403</a></div></div>
<div class="ttc" id="aclassDbcStatementDispatcher_html_a495c2d5c7ebb8103b1987cdd87c142ed"><div class="ttname"><a href="classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed">DbcStatementDispatcher::Dispatch</a></div><div class="ttdeci">bool Dispatch(const std::string &amp;line, DbcParseContext &amp;context) const</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00423">dbc_statement_handler.cpp:423</a></div></div>
<div class="ttc" id="aclassDbcStatementHandler_html"><div class="ttname"><a href="classDbcStatementHandler.html">DbcStatementHandler</a></div><div class="ttdoc">Interface for processing a registered DBC statement.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00087">dbc_statement_handler.h:87</a></div></div>
<div class="ttc" id="aclassDbcStatementHandler_html_a3de86e1e27e9bcb0fe6f1460a8ba5739"><div class="ttname"><a href="classDbcStatementHandler.html#a3de86e1e27e9bcb0fe6f1460a8ba5739">DbcStatementHandler::Handle</a></div><div class="ttdeci">virtual void Handle(const std::string &amp;line, DbcParseContext &amp;context) const =0</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html"><div class="ttname"><a href="classDbcValueDescriptionHandler.html">DbcValueDescriptionHandler</a></div><div class="ttdoc">Defer raw value descriptions for target resolution.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00125">dbc_statement_handler.h:125</a></div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html_a653e13364f396b54244edc2c0fdd831a"><div class="ttname"><a href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">DbcValueDescriptionHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00404">dbc_statement_handler.cpp:404</a></div></div>
<div class="ttc" id="aclassDbcValueDescriptionHandler_html_a653e13364f396b54244edc2c0fdd831a"><div class="ttname"><a href="classDbcValueDescriptionHandler.html#a653e13364f396b54244edc2c0fdd831a">DbcValueDescriptionHandler::Handle</a></div><div class="ttdeci">void Handle(const std::string &amp;line, DbcParseContext &amp;context) const override</div><div class="ttdoc">Process a trimmed statement using state belonging to this parse.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00435">dbc_statement_handler.cpp:435</a></div></div>
<div class="ttc" id="aclassTypeFactory_html"><div class="ttname"><a href="classTypeFactory.html">TypeFactory</a></div><div class="ttdoc">Registry-based factory for creating objects by runtime identifier.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00059">typefactory.h:59</a></div></div>
<div class="ttc" id="aclassTypeFactory_html_a3f43b03d6e3a0fd503fdec01ecf62e9f"><div class="ttname"><a href="classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f">TypeFactory::create</a></div><div class="ttdeci">BasePtr create(const ClassId &amp;id, Args... args) const</div><div class="ttdoc">Creates an instance for the given id using provided arguments.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00099">typefactory.h:99</a></div></div>
<div class="ttc" id="aclassTypeFactory_html_ad6d85795285ee21193ac03e1b24762d3"><div class="ttname"><a href="classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3">TypeFactory::registerType</a></div><div class="ttdeci">void registerType(const ClassId &amp;id)</div><div class="ttdoc">Registers a Derived type under the given id.</div><div class="ttdef"><b>Definition</b> <a href="typefactory_8h_source.html#l00078">typefactory.h:78</a></div></div>
@@ -305,11 +305,11 @@ $(document).ready(function(){initNavTree('dbc__statement__handler_8h_source.html
<div class="ttc" id="astructDbcParseContext_html_a57f5a7f613ecd0dadbafa7af736b7e54"><div class="ttname"><a href="structDbcParseContext.html#a57f5a7f613ecd0dadbafa7af736b7e54">DbcParseContext::lineNumber</a></div><div class="ttdeci">std::size_t lineNumber</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00064">dbc_statement_handler.h:64</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_a79bad0b8302e2156670461bab529259c"><div class="ttname"><a href="structDbcParseContext.html#a79bad0b8302e2156670461bab529259c">DbcParseContext::database</a></div><div class="ttdeci">DbcDatabase &amp; database</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00061">dbc_statement_handler.h:61</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_a854abba7bbf4adfc948554c254156e60"><div class="ttname"><a href="structDbcParseContext.html#a854abba7bbf4adfc948554c254156e60">DbcParseContext::pendingComments</a></div><div class="ttdeci">std::vector&lt; PendingComment &gt; pendingComments</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00074">dbc_statement_handler.h:74</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_a908056de0a97316a4ebecb3f99cc400b"><div class="ttname"><a href="structDbcParseContext.html#a908056de0a97316a4ebecb3f99cc400b">DbcParseContext::ValidateMultiplexing</a></div><div class="ttdeci">void ValidateMultiplexing(const std::string &amp;filePath) const</div><div class="ttdoc">Validate selectors, branch ranges, and signal overlap.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00536">dbc_statement_handler.cpp:536</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_a908056de0a97316a4ebecb3f99cc400b"><div class="ttname"><a href="structDbcParseContext.html#a908056de0a97316a4ebecb3f99cc400b">DbcParseContext::ValidateMultiplexing</a></div><div class="ttdeci">void ValidateMultiplexing(const std::string &amp;filePath) const</div><div class="ttdoc">Validate selectors, branch ranges, and signal overlap.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00567">dbc_statement_handler.cpp:567</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_a93f8ece0f3d16bd79f631ae07afa7b54"><div class="ttname"><a href="structDbcParseContext.html#a93f8ece0f3d16bd79f631ae07afa7b54">DbcParseContext::enableJ1939</a></div><div class="ttdeci">bool enableJ1939</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00063">dbc_statement_handler.h:63</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_ab5552dad944fde7fa6add6464ddb5369"><div class="ttname"><a href="structDbcParseContext.html#ab5552dad944fde7fa6add6464ddb5369">DbcParseContext::ResolveValueDescriptions</a></div><div class="ttdeci">void ResolveValueDescriptions(const std::string &amp;filePath)</div><div class="ttdoc">Resolve deferred raw descriptions against unique targets.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00437">dbc_statement_handler.cpp:437</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_ab5552dad944fde7fa6add6464ddb5369"><div class="ttname"><a href="structDbcParseContext.html#ab5552dad944fde7fa6add6464ddb5369">DbcParseContext::ResolveValueDescriptions</a></div><div class="ttdeci">void ResolveValueDescriptions(const std::string &amp;filePath)</div><div class="ttdoc">Resolve deferred raw descriptions against unique targets.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00468">dbc_statement_handler.cpp:468</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_ac22cba614ada3a28c7dcc1ea338b0e01"><div class="ttname"><a href="structDbcParseContext.html#ac22cba614ada3a28c7dcc1ea338b0e01">DbcParseContext::pendingValues</a></div><div class="ttdeci">std::vector&lt; PendingValueDescriptions &gt; pendingValues</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00065">dbc_statement_handler.h:65</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_aeae343c57a244634489a0e0b960155d7"><div class="ttname"><a href="structDbcParseContext.html#aeae343c57a244634489a0e0b960155d7">DbcParseContext::ResolveComments</a></div><div class="ttdeci">void ResolveComments(const std::string &amp;filePath)</div><div class="ttdoc">Resolve deferred comments after all definitions are known.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00354">dbc_statement_handler.cpp:354</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_aeae343c57a244634489a0e0b960155d7"><div class="ttname"><a href="structDbcParseContext.html#aeae343c57a244634489a0e0b960155d7">DbcParseContext::ResolveComments</a></div><div class="ttdeci">void ResolveComments(const std::string &amp;filePath)</div><div class="ttdoc">Resolve deferred comments after all definitions are known.</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8cpp_source.html#l00385">dbc_statement_handler.cpp:385</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_af31b56247edff7f025957ae023a56913"><div class="ttname"><a href="structDbcParseContext.html#af31b56247edff7f025957ae023a56913">DbcParseContext::currentFrame</a></div><div class="ttdeci">FrameInfo * currentFrame</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00062">dbc_statement_handler.h:62</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_af8b411c938a2ea9100c4aaae452e6546"><div class="ttname"><a href="structDbcParseContext.html#af8b411c938a2ea9100c4aaae452e6546">DbcParseContext::signalLines</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::size_t &gt; &gt; signalLines</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00070">dbc_statement_handler.h:70</a></div></div>
<div class="ttc" id="astructDbcParseContext_html_afbfa4b26a58b41ada3dabc619066035c"><div class="ttname"><a href="structDbcParseContext.html#afbfa4b26a58b41ada3dabc619066035c">DbcParseContext::pendingAttributes</a></div><div class="ttdeci">std::vector&lt; PendingAttribute &gt; pendingAttributes</div><div class="ttdef"><b>Definition</b> <a href="dbc__statement__handler_8h_source.html#l00078">dbc_statement_handler.h:78</a></div></div>
+2 -1
View File
@@ -168,7 +168,8 @@
<section title="Database validation coverage" ref="md_tests_2README.html#autotoc_md167"/>
<section title="End-to-end pipeline coverage" ref="md_tests_2README.html#autotoc_md168"/>
<section title="Attribute coverage" ref="md_tests_2README.html#autotoc_md169"/>
<section title="Extended validation" ref="md_tests_2README.html#autotoc_md170"/>
<section title="Long signal definitions" ref="md_tests_2README.html#autotoc_md170"/>
<section title="Extended validation" ref="md_tests_2README.html#autotoc_md171"/>
</section>
<section title="Classes" ref="annotated.html">
<section title="Class List" ref="annotated.html">
+1 -1
View File
@@ -621,7 +621,7 @@ Signal definition</h1>
<hr />
<h2><a class="anchor" id="autotoc_md106"></a>
Signal validation and parse errors</h2>
<p><code>SG_</code> statements are matched completely. Signal names must be nonempty and contain no whitespace. Spaces and tabs are accepted between syntax elements; byte order and signedness remain adjacent (<code>@0+</code>, <code>@0-</code>, <code>@1+</code>, or <code>@1-</code>). A quoted unit (which may be empty) and a nonempty comma-separated receiver list are required. Unexpected trailing fields are rejected.</p>
<p><code>SG_</code> statements are read completely with an iterative scanner. Signal parsing and numeric conversion do not use recursive regular-expression matching, so long fields do not consume stack space proportional to their length. No new statement length limit is imposed; valid long fields are preserved, and malformed statements return the usual source diagnostics. Signal names must be nonempty and contain no whitespace. Spaces and tabs are accepted between syntax elements; byte order and signedness remain adjacent (<code>@0+</code>, <code>@0-</code>, <code>@1+</code>, or <code>@1-</code>). A quoted unit (which may be empty) and a nonempty comma-separated receiver list are required. Unexpected trailing fields are rejected.</p>
<p>Start bits must be unsigned decimal integers fitting <code>uint32_t</code>; lengths must be within <code>1..64</code> bits. Signs, fractional values, numeric suffixes, and overflow are rejected for these fields. Every signal bit must fit within the frame's declared payload length, using Intel increasing bit positions or Motorola sawtooth traversal. This uses the stored payload length without introducing an additional CAN or CAN FD payload limit.</p>
<p>Factor, offset, minimum, and maximum accept signed decimal numbers, fractions, and scientific notation. Conversion is independent of the application's C and C++ locales: the decimal separator is always a dot (<code>.</code>), and comma decimals and digit grouping are rejected. The entire numeric token must be valid; hexadecimal numbers, NaN, infinity, conversion overflow, and conversion underflow (including subnormal values) are rejected. Minimum must not exceed maximum. Zero and negative factors are allowed.</p>
<p>Basic and extended multiplexing markers are supported as described below. Overlapping signals are rejected unless their selector conditions prove mutual exclusion. Duplicate frame keys and signal names within a frame are rejected.</p>
+4
View File
@@ -115,6 +115,10 @@ Testing</h3>
<h3><a class="anchor" id="autotoc_md11"></a>
Fixed</h3>
<ul>
<li>Replace recursive regular-expression matching for <code>SG_</code> statements with an iterative field scanner. Long unit strings no longer overflow the stack.</li>
<li>Parse signal physical values directly with locale-independent <code>from_chars</code>, retaining complete-token, finite-value, overflow, and underflow validation without recursive numeric regex matching.</li>
<li>Preserve long valid fields without a new length limit, and reject malformed statements through the existing source-located diagnostic and throwing APIs.</li>
<li>Add parser regressions for 50,000-character fields, large receiver lists, malformed syntax, and numeric errors. Verify Release and ASan/UBSan builds with the optional Qt adapter: 2,409 core checks, seven model checks, and the qmake tree test pass in each build. One named-locale test skips because its locale is unavailable; local sanitizer leak checking remains disabled due to the documented ptrace restriction.</li>
<li>Read attribute definitions, defaults, and assignments across physical lines. Preserve quoted newlines and semicolons, and report attribute errors and unsupported frame formats at the statement's first physical line.</li>
<li>Add regressions for multiline frame formats and cycle times, deferred values, CRLF input, escaped strings, malformed statements, and diagnostic locations.</li>
</ul>
+4
View File
@@ -160,6 +160,10 @@ Attribute coverage</h1>
<p>Parser slots <code>attributes</code>, <code>invalidAttributes</code>, and <code>attributeWarnings</code> cover all five scopes and types, deferred definitions/defaults/targets, explicit values overriding defaults, repeated assignments, escaped strings, typed range/scope errors, duplicate definitions/defaults, unknown attributes and missing targets. They check source diagnostics and the throwing API, distinct standard/extended targets, frame cycle times and enum labels, unsupported formats and ID conflicts, unchanged J1939 opt-in, and runtime/tree propagation. Existing unsupported-statement checks now use relation forms, which remain unsupported, instead of supported attribute forms.</p>
<p>Attribute changes were verified with <code>qmake6 ../dbc.pro</code>, <code>make -j4</code>, and <code>make check</code> in <code>build/</code>: all six QtTest suites and the qmake tree target passed. The standalone C++17 tree test also passed. The existing named comma-decimal C locale test skipped because the locale is not installed.</p>
<h1><a class="anchor" id="autotoc_md170"></a>
Long signal definitions</h1>
<p><code>longSignalDefinitions</code> reproduces the former stack overflow with a 50,000-character unit string. Both parser APIs are exercised with long units, signal names, receivers, decimal numbers, and a list of 10,001 receivers. Valid input must parse without truncating units; malformed input (including missing quotes, delimiters, receiver separators, numeric suffixes, overflow, and trailing receiver commas) must return an empty database and an <code>InvalidStatement</code> diagnostic at the signal's source line, or throw a source-located error through <code>ParseFile()</code>. These cases run as part of the existing parser target and sanitizer builds.</p>
<p>Verified with Qt 6.8.2 in separate Release and ASan/UBSan builds, both with <code>CONFIG+=dbc_qt</code>: <code>make check</code> passed 2,409 core QtTest checks, seven model checks, and the qmake tree test in each build. The named comma-decimal C locale test skipped because the required locale is not installed. The sanitizer run used <code>ASAN_OPTIONS=detect_leaks=0:halt_on_error=1</code> and <code>UBSAN_OPTIONS=halt_on_error=1</code>; address and undefined-behavior checks passed, while leak checking was disabled because of the environment's previously documented ptrace restriction.</p>
<h1><a class="anchor" id="autotoc_md171"></a>
Extended validation</h1>
<p><code>attributeNumbers</code> checks signed 64-bit limits, leading plus signs, decimal HEX values, FLOAT fractions/exponents, and default overrides under a comma-decimal C++ locale. Node/environment defaults remain on definitions without becoming database attributes. <code>invalidAttributeNumbers</code> supplies 39 data rows, each checked in both definition bounds, a default, and an explicit assignment. The throwing and diagnostic APIs must reject malformed signs, trailing text, hexadecimal notation, non-finite values, overflow, and underflow with the correct error line. Additional malformed-attribute cases cover token separators, scope/type names, reversed FLOAT bounds, value types/ranges, and invalid CAN references.</p>
<p>Run AddressSanitizer and UndefinedBehaviorSanitizer in a separate directory:</p>
+2 -1
View File
@@ -181,7 +181,8 @@ var NAVTREE =
[ "Database validation coverage", "md_tests_2README.html#autotoc_md167", null ],
[ "End-to-end pipeline coverage", "md_tests_2README.html#autotoc_md168", null ],
[ "Attribute coverage", "md_tests_2README.html#autotoc_md169", null ],
[ "Extended validation", "md_tests_2README.html#autotoc_md170", null ]
[ "Long signal definitions", "md_tests_2README.html#autotoc_md170", null ],
[ "Extended validation", "md_tests_2README.html#autotoc_md171", null ]
] ],
[ "Classes", "annotated.html", [
[ "Class List", "annotated.html", "annotated_dup" ],
+1
View File
@@ -59,6 +59,7 @@ var NAVTREEINDEX1 =
"md_tests_2README.html#autotoc_md168":[3,7],
"md_tests_2README.html#autotoc_md169":[3,8],
"md_tests_2README.html#autotoc_md170":[3,9],
"md_tests_2README.html#autotoc_md171":[3,10],
"multiplex__graph_8h_source.html":[5,0,0,19],
"multiplexing_8h_source.html":[5,0,0,20],
"pages.html":[],
+2 -1
View File
@@ -13,5 +13,6 @@ var searchData=
['live_20path_10',['live path',['../md_README.html#autotoc_md127',1,'']]],
['local_20core_20regression_20checks_11',['Local core regression checks',['../md_README.html#autotoc_md147',1,'']]],
['local_20regression_20checks_12',['Local regression checks',['../md_tests_2README.html#autotoc_md161',1,'']]],
['lookup_13',['J1939 Opt-in and PGN Lookup',['../md_README.html#autotoc_md114',1,'']]]
['long_20signal_20definitions_13',['Long signal definitions',['../md_tests_2README.html#autotoc_md170',1,'']]],
['lookup_14',['J1939 Opt-in and PGN Lookup',['../md_README.html#autotoc_md114',1,'']]]
];
+29 -28
View File
@@ -5,32 +5,33 @@ var searchData=
['settree_2',['SetTree',['../classDbcTreeModel.html#a8cb5a81d456cdead42b75fd3462ee00a',1,'DbcTreeModel']]],
['severity_3',['severity',['../structDbcDiagnostic.html#a75040a94f0313a606478020b0491f81d',1,'DbcDiagnostic']]],
['signal_20definition_4',['Signal definition',['../md_README.html#autotoc_md104',1,'']]],
['signal_20identifiers_5',['Stable frame and signal identifiers',['../md_README.html#autotoc_md91',1,'']]],
['signal_20validation_20and_20parse_20errors_6',['Signal validation and parse errors',['../md_README.html#autotoc_md106',1,'']]],
['signal_20value_20descriptions_20tt_20val_5f_20tt_7',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md136',1,'']]],
['signal_5finfo_2eh_8',['signal_info.h',['../signal__info_8h.html',1,'']]],
['signaldecodestatus_9',['SignalDecodeStatus',['../dbc__decoder_8h.html#a5f4a41ee2810487020135b45e8d7559a',1,'dbc_decoder.h']]],
['signalinfo_10',['SignalInfo',['../structSignalInfo.html',1,'']]],
['signalinfo_20tt_11',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md58',1,'']]],
['signalkey_12',['signalkey',['../structSignalKey.html',1,'SignalKey'],['../structSignalKey.html#aa4221b34e75469bf5aa939976c334f46',1,'SignalKey::SignalKey()']]],
['signalkeyhasher_13',['SignalKeyHasher',['../structSignalKeyHasher.html',1,'']]],
['signallines_14',['signalLines',['../structDbcParseContext.html#af8b411c938a2ea9100c4aaae452e6546',1,'DbcParseContext']]],
['signalname_15',['signalname',['../structPendingComment.html#ae7b5aea9c252a4ab87e02915d24fee27',1,'PendingComment::signalName'],['../structPendingValueDescriptions.html#ac35446db10ebda5a12349759613f8c90',1,'PendingValueDescriptions::signalName']]],
['stable_20frame_20and_20signal_20identifiers_16',['Stable frame and signal identifiers',['../md_README.html#autotoc_md91',1,'']]],
['stage_201_20already_20implemented_17',['Stage 1 - already implemented',['../md_README.html#autotoc_md141',1,'']]],
['stage_202_18',['Stage 2',['../md_README.html#autotoc_md142',1,'']]],
['stage_203_19',['Stage 3',['../md_README.html#autotoc_md143',1,'']]],
['stage_204_20',['Stage 4',['../md_README.html#autotoc_md144',1,'']]],
['standalone_20tree_20tests_20without_20qt_21',['Standalone tree tests without Qt',['../md_README.html#autotoc_md150',1,'']]],
['startbit_22',['startbit',['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit'],['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit']]],
['statement_23',['statement',['../structPendingAttribute.html#a0ec62fc577e3a2d5f63d926f829e2ab8',1,'PendingAttribute']]],
['statement_20handler_20factory_24',['Statement Handler Factory',['../md_README.html#autotoc_md134',1,'']]],
['status_25',['status',['../structDecodedFrameValue.html#a645f433798d48a2787e7f00dfbb7dff9',1,'DecodedFrameValue::status'],['../structDecodedSignalValue.html#a94161a80412b3961da8fd2fec43c25f6',1,'DecodedSignalValue::status']]],
['steps_26',['Recommended Next Steps',['../md_README.html#autotoc_md140',1,'']]],
['strategy_27',['Unified Decode Strategy',['../md_README.html#autotoc_md126',1,'']]],
['structured_20diagnostics_28',['Structured diagnostics',['../md_README.html#autotoc_md96',1,'']]],
['structures_29',['Parsed Data Structures',['../md_README.html#autotoc_md57',1,'']]],
['support_30',['Parser Support',['../md_README.html#autotoc_md95',1,'']]],
['supported_20dbc_20syntax_31',['Supported DBC Syntax',['../md_README.html#autotoc_md99',1,'']]],
['syntax_32',['Supported DBC Syntax',['../md_README.html#autotoc_md99',1,'']]]
['signal_20definitions_5',['Long signal definitions',['../md_tests_2README.html#autotoc_md170',1,'']]],
['signal_20identifiers_6',['Stable frame and signal identifiers',['../md_README.html#autotoc_md91',1,'']]],
['signal_20validation_20and_20parse_20errors_7',['Signal validation and parse errors',['../md_README.html#autotoc_md106',1,'']]],
['signal_20value_20descriptions_20tt_20val_5f_20tt_8',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md136',1,'']]],
['signal_5finfo_2eh_9',['signal_info.h',['../signal__info_8h.html',1,'']]],
['signaldecodestatus_10',['SignalDecodeStatus',['../dbc__decoder_8h.html#a5f4a41ee2810487020135b45e8d7559a',1,'dbc_decoder.h']]],
['signalinfo_11',['SignalInfo',['../structSignalInfo.html',1,'']]],
['signalinfo_20tt_12',['&lt;tt&gt;SignalInfo&lt;/tt&gt;',['../md_README.html#autotoc_md58',1,'']]],
['signalkey_13',['signalkey',['../structSignalKey.html',1,'SignalKey'],['../structSignalKey.html#aa4221b34e75469bf5aa939976c334f46',1,'SignalKey::SignalKey()']]],
['signalkeyhasher_14',['SignalKeyHasher',['../structSignalKeyHasher.html',1,'']]],
['signallines_15',['signalLines',['../structDbcParseContext.html#af8b411c938a2ea9100c4aaae452e6546',1,'DbcParseContext']]],
['signalname_16',['signalname',['../structPendingValueDescriptions.html#ac35446db10ebda5a12349759613f8c90',1,'PendingValueDescriptions::signalName'],['../structPendingComment.html#ae7b5aea9c252a4ab87e02915d24fee27',1,'PendingComment::signalName']]],
['stable_20frame_20and_20signal_20identifiers_17',['Stable frame and signal identifiers',['../md_README.html#autotoc_md91',1,'']]],
['stage_201_20already_20implemented_18',['Stage 1 - already implemented',['../md_README.html#autotoc_md141',1,'']]],
['stage_202_19',['Stage 2',['../md_README.html#autotoc_md142',1,'']]],
['stage_203_20',['Stage 3',['../md_README.html#autotoc_md143',1,'']]],
['stage_204_21',['Stage 4',['../md_README.html#autotoc_md144',1,'']]],
['standalone_20tree_20tests_20without_20qt_22',['Standalone tree tests without Qt',['../md_README.html#autotoc_md150',1,'']]],
['startbit_23',['startbit',['../structDecodeSignal.html#aaf5d7527ddf65b6355c2b4f3626df22d',1,'DecodeSignal::startBit'],['../structSignalInfo.html#ace290724f9801521609aedaa946d61f1',1,'SignalInfo::startBit']]],
['statement_24',['statement',['../structPendingAttribute.html#a0ec62fc577e3a2d5f63d926f829e2ab8',1,'PendingAttribute']]],
['statement_20handler_20factory_25',['Statement Handler Factory',['../md_README.html#autotoc_md134',1,'']]],
['status_26',['status',['../structDecodedSignalValue.html#a94161a80412b3961da8fd2fec43c25f6',1,'DecodedSignalValue::status'],['../structDecodedFrameValue.html#a645f433798d48a2787e7f00dfbb7dff9',1,'DecodedFrameValue::status']]],
['steps_27',['Recommended Next Steps',['../md_README.html#autotoc_md140',1,'']]],
['strategy_28',['Unified Decode Strategy',['../md_README.html#autotoc_md126',1,'']]],
['structured_20diagnostics_29',['Structured diagnostics',['../md_README.html#autotoc_md96',1,'']]],
['structures_30',['Parsed Data Structures',['../md_README.html#autotoc_md57',1,'']]],
['support_31',['Parser Support',['../md_README.html#autotoc_md95',1,'']]],
['supported_20dbc_20syntax_32',['Supported DBC Syntax',['../md_README.html#autotoc_md99',1,'']]],
['syntax_33',['Supported DBC Syntax',['../md_README.html#autotoc_md99',1,'']]]
];
+1 -1
View File
@@ -4,7 +4,7 @@ var searchData=
['val_5f_20tt_1',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md136',1,'']]],
['valid_2',['valid',['../structDecodedFrameValue.html#a4f51c31110dba1f73a763c596372beb0',1,'DecodedFrameValue::valid'],['../structDecodedSignalValue.html#aac0ed361af545cde48d0e6f41a859686',1,'DecodedSignalValue::valid']]],
['validatemultiplexing_3',['ValidateMultiplexing',['../structDbcParseContext.html#a908056de0a97316a4ebecb3f99cc400b',1,'DbcParseContext']]],
['validation_4',['Extended validation',['../md_tests_2README.html#autotoc_md170',1,'']]],
['validation_4',['Extended validation',['../md_tests_2README.html#autotoc_md171',1,'']]],
['validation_20and_20parse_20errors_5',['validation and parse errors',['../md_README.html#autotoc_md102',1,'Frame validation and parse errors'],['../md_README.html#autotoc_md106',1,'Signal validation and parse errors']]],
['validation_20coverage_6',['Database validation coverage',['../md_tests_2README.html#autotoc_md167',1,'']]],
['value_7',['value',['../structAttributeAssignment.html#a93de8c51c5154219bf18beadcec5708f',1,'AttributeAssignment::value'],['../structMultiplexing.html#a79158d4fdbfd68a3d51a8ce79d34fd67',1,'Multiplexing::value']]],
+11 -10
View File
@@ -49,7 +49,7 @@ var searchData=
['decode_20path_46',['2. Runtime decode path',['../md_README.html#autotoc_md51',1,'']]],
['decode_20strategy_47',['Unified Decode Strategy',['../md_README.html#autotoc_md126',1,'']]],
['decode_5fdatabase_2eh_48',['decode_database.h',['../decode__database_8h.html',1,'']]],
['decodedatabase_49',['decodedatabase',['../classDecodeDatabase.html',1,'DecodeDatabase'],['../classDecodeDatabase.html#a51a44cf7c3f23c98ec8781afe0097c0c',1,'DecodeDatabase::DecodeDatabase()']]],
['decodedatabase_49',['decodedatabase',['../classDecodeDatabase.html#a51a44cf7c3f23c98ec8781afe0097c0c',1,'DecodeDatabase::DecodeDatabase()'],['../classDecodeDatabase.html',1,'DecodeDatabase']]],
['decodedatabase_20tt_50',['&lt;tt&gt;DecodeDatabase&lt;/tt&gt;',['../md_README.html#autotoc_md80',1,'']]],
['decodedframevalue_51',['DecodedFrameValue',['../structDecodedFrameValue.html',1,'']]],
['decodedframevalue_20tt_52',['&lt;tt&gt;DecodedFrameValue&lt;/tt&gt;',['../md_README.html#autotoc_md89',1,'']]],
@@ -65,13 +65,14 @@ var searchData=
['definition_62',['definition',['../structDecodedSignalValue.html#a828b5ef7faefc14fbf5dbd46249bcad2',1,'DecodedSignalValue::definition'],['../structDecodedFrameValue.html#a33e971ba10030506007aa201c89f351d',1,'DecodedFrameValue::definition'],['../structPgnLookupResult.html#aa5b79b61d2aef48fd6ae070cf5f901c1',1,'PgnLookupResult::definition'],['../md_README.html#autotoc_md100',1,'Frame definition'],['../md_README.html#autotoc_md104',1,'Signal definition']]],
['definition_20lifetime_20and_20reload_20coverage_63',['Definition lifetime and reload coverage',['../md_tests_2README.html#autotoc_md166',1,'']]],
['definition_20ownership_20and_20reload_64',['Definition ownership and reload',['../md_README.html#autotoc_md90',1,'']]],
['demo_65',['Build and run the demo',['../md_README.html#autotoc_md151',1,'']]],
['descriptions_66',['descriptions',['../structPendingValueDescriptions.html#a10ecbaeaed2cc3ac82fada73e7e041dd',1,'PendingValueDescriptions']]],
['descriptions_20tt_20val_5f_20tt_67',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md136',1,'']]],
['diagnostic_68',['diagnostic',['../classDbcDiagnosticError.html#ab3965082f01d66b6d5c20525af44235d',1,'DbcDiagnosticError']]],
['diagnostics_69',['diagnostics',['../structDbcParseResult.html#a3a1987b4381bb1e0a34dc09e31483679',1,'DbcParseResult::diagnostics'],['../md_README.html#autotoc_md96',1,'Structured diagnostics']]],
['dispatch_70',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
['dlc_71',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc']]],
['documentation_72',['documentation',['../md_README.html',1,'DBC Parser and Runtime Decode Module Documentation'],['../md_changelog.html#autotoc_md42',1,'Documentation'],['../md_README.html#autotoc_md152',1,'Generate API documentation']]],
['documentation_20and_20maintenance_73',['documentation and maintenance',['../md_changelog.html#autotoc_md37',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md45',1,'Documentation and maintenance']]]
['definitions_65',['Long signal definitions',['../md_tests_2README.html#autotoc_md170',1,'']]],
['demo_66',['Build and run the demo',['../md_README.html#autotoc_md151',1,'']]],
['descriptions_67',['descriptions',['../structPendingValueDescriptions.html#a10ecbaeaed2cc3ac82fada73e7e041dd',1,'PendingValueDescriptions']]],
['descriptions_20tt_20val_5f_20tt_68',['Signal value descriptions (&lt;tt&gt;VAL_&lt;/tt&gt;)',['../md_README.html#autotoc_md136',1,'']]],
['diagnostic_69',['diagnostic',['../classDbcDiagnosticError.html#ab3965082f01d66b6d5c20525af44235d',1,'DbcDiagnosticError']]],
['diagnostics_70',['diagnostics',['../structDbcParseResult.html#a3a1987b4381bb1e0a34dc09e31483679',1,'DbcParseResult::diagnostics'],['../md_README.html#autotoc_md96',1,'Structured diagnostics']]],
['dispatch_71',['Dispatch',['../classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed',1,'DbcStatementDispatcher']]],
['dlc_72',['dlc',['../structDecodeFrame.html#a51111ac13988be372d5673d12cf3e060',1,'DecodeFrame::dlc'],['../structFrameInfo.html#aa2b198ea0f55e560c123d35e7b3ecab9',1,'FrameInfo::dlc']]],
['documentation_73',['documentation',['../md_README.html',1,'DBC Parser and Runtime Decode Module Documentation'],['../md_changelog.html#autotoc_md42',1,'Documentation'],['../md_README.html#autotoc_md152',1,'Generate API documentation']]],
['documentation_20and_20maintenance_74',['documentation and maintenance',['../md_changelog.html#autotoc_md45',1,'Documentation and maintenance'],['../md_changelog.html#autotoc_md37',1,'Documentation and maintenance']]]
];
+1 -1
View File
@@ -9,6 +9,6 @@ var searchData=
['example_20usage_6',['Example Usage',['../md_README.html#autotoc_md120',1,'']]],
['examples_2fmain_2ecpp_7',['main.cpp',['../examples_2main_8cpp.html',1,'']]],
['exists_8',['Why the Runtime Decode Layer Exists',['../md_README.html#autotoc_md53',1,'']]],
['extended_20validation_9',['Extended validation',['../md_tests_2README.html#autotoc_md170',1,'']]],
['extended_20validation_9',['Extended validation',['../md_tests_2README.html#autotoc_md171',1,'']]],
['extraction_10',['Intel and Motorola Extraction',['../md_README.html#autotoc_md118',1,'']]]
];
+1 -1
View File
@@ -133,7 +133,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__database_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__database_8h_source.html">dbc_database.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__builder_8cpp_source.html#l00014">DbcTreeBuilder::Build()</a>, <a class="el" href="dbc__decode__builder_8cpp_source.html#l00015">DbcDecodeBuilder::Build()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00259">DbcParseContext::ResolveAttributes()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">DbcParseContext::ValidateMultiplexing()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__builder_8cpp_source.html#l00014">DbcTreeBuilder::Build()</a>, <a class="el" href="dbc__decode__builder_8cpp_source.html#l00015">DbcDecodeBuilder::Build()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00259">DbcParseContext::ResolveAttributes()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">DbcParseContext::ValidateMultiplexing()</a>.</p>
</div>
</div>
+11 -11
View File
@@ -159,7 +159,7 @@ Public Attributes</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00486">486</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00517">517</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
</div>
</div>
@@ -181,7 +181,7 @@ Public Attributes</h2></td></tr>
<p>Validate selectors, branch ranges, and signal overlap. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">536</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">567</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00061">database</a>, <a class="el" href="dbc__database_8h_source.html#l00023">DbcDatabase::frames</a>, <a class="el" href="signal__info_8h_source.html#l00031">SignalInfo::isSigned</a>, <a class="el" href="signal__info_8h_source.html#l00026">SignalInfo::multiplexing</a>, and <a class="el" href="dbc__statement__handler_8h_source.html#l00070">signalLines</a>.</p>
@@ -205,7 +205,7 @@ Public Attributes</h2></td></tr>
<p>Resolve deferred comments after all definitions are known. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00354">354</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00385">385</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="frame__info_8h_source.html#l00033">FrameInfo::comment</a>, <a class="el" href="signal__info_8h_source.html#l00039">SignalInfo::comment</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00061">database</a>, and <a class="el" href="dbc__statement__handler_8h_source.html#l00074">pendingComments</a>.</p>
@@ -263,7 +263,7 @@ Public Attributes</h2></td></tr>
<p>Resolve deferred raw descriptions against unique targets. </p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00437">437</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8cpp_source.html#l00468">468</a> of file <a class="el" href="dbc__statement__handler_8cpp_source.html">dbc_statement_handler.cpp</a>.</p>
<p class="reference">References <a class="el" href="dbc__statement__handler_8h_source.html#l00061">database</a>, <a class="el" href="dbc__statement__handler_8h_source.html#l00065">pendingValues</a>, and <a class="el" href="signal__info_8h_source.html#l00038">SignalInfo::valueDescriptions</a>.</p>
@@ -285,7 +285,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00061">61</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00259">ResolveAttributes()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00354">ResolveComments()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00437">ResolveValueDescriptions()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">ValidateMultiplexing()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00259">ResolveAttributes()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00385">ResolveComments()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00468">ResolveValueDescriptions()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">ValidateMultiplexing()</a>.</p>
</div>
</div>
@@ -304,7 +304,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00062">62</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -323,7 +323,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00063">63</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>.</p>
</div>
</div>
@@ -342,7 +342,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00064">64</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00255">DbcAttributeHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00453">DbcMultiplexingHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>, <a class="el" href="dbc__attributes_8cpp_source.html#l00255">DbcAttributeHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00484">DbcMultiplexingHandler::Handle()</a>.</p>
</div>
</div>
@@ -361,7 +361,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00065">65</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00437">ResolveValueDescriptions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00468">ResolveValueDescriptions()</a>.</p>
</div>
</div>
@@ -396,7 +396,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00070">70</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">ValidateMultiplexing()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>, <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">ValidateMultiplexing()</a>.</p>
</div>
</div>
@@ -415,7 +415,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00074">74</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00354">ResolveComments()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00385">ResolveComments()</a>.</p>
</div>
</div>
+7 -7
View File
@@ -149,7 +149,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00026">26</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -168,7 +168,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00027">27</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>.</p>
</div>
</div>
@@ -187,7 +187,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00028">28</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>.</p>
</div>
</div>
@@ -206,7 +206,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00029">29</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>.</p>
</div>
</div>
@@ -225,7 +225,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00030">30</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00280">DbcFrameHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00311">DbcFrameHandler::Handle()</a>.</p>
</div>
</div>
@@ -244,7 +244,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00031">31</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -280,7 +280,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="frame__info_8h_source.html#l00033">33</a> of file <a class="el" href="frame__info_8h_source.html">frame_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00354">DbcParseContext::ResolveComments()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00385">DbcParseContext::ResolveComments()</a>.</p>
</div>
</div>
+6 -6
View File
@@ -137,7 +137,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00023">23</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -156,7 +156,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00024">24</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -175,7 +175,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00025">25</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -194,7 +194,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00026">26</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -213,7 +213,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00027">27</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -232,7 +232,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00028">28</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00308">DbcCommentHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00339">DbcCommentHandler::Handle()</a>.</p>
</div>
</div>
@@ -135,7 +135,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00014">14</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>.</p>
</div>
</div>
@@ -154,7 +154,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00015">15</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>.</p>
</div>
</div>
@@ -173,7 +173,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00016">16</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>.</p>
</div>
</div>
@@ -192,7 +192,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00017">17</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>.</p>
</div>
</div>
@@ -211,7 +211,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="dbc__statement__handler_8h_source.html#l00018">18</a> of file <a class="el" href="dbc__statement__handler_8h_source.html">dbc_statement_handler.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00404">DbcValueDescriptionHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00435">DbcValueDescriptionHandler::Handle()</a>.</p>
</div>
</div>
+8 -8
View File
@@ -155,7 +155,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00026">26</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">DbcParseContext::ValidateMultiplexing()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">DbcParseContext::ValidateMultiplexing()</a>.</p>
</div>
</div>
@@ -174,7 +174,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00027">27</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -193,7 +193,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00028">28</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -212,7 +212,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00029">29</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -231,7 +231,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00030">30</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00294">DbcSignalHandler::Handle()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00325">DbcSignalHandler::Handle()</a>.</p>
</div>
</div>
@@ -250,7 +250,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00031">31</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00536">DbcParseContext::ValidateMultiplexing()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00567">DbcParseContext::ValidateMultiplexing()</a>.</p>
</div>
</div>
@@ -373,7 +373,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00038">38</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00437">DbcParseContext::ResolveValueDescriptions()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00468">DbcParseContext::ResolveValueDescriptions()</a>.</p>
</div>
</div>
@@ -392,7 +392,7 @@ Public Attributes</h2></td></tr>
<p class="definition">Definition at line <a class="el" href="signal__info_8h_source.html#l00039">39</a> of file <a class="el" href="signal__info_8h_source.html">signal_info.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00354">DbcParseContext::ResolveComments()</a>.</p>
<p class="reference">Referenced by <a class="el" href="dbc__tree__model_8cpp_source.html#l00074">DbcTreeModel::data()</a>, and <a class="el" href="dbc__statement__handler_8cpp_source.html#l00385">DbcParseContext::ResolveComments()</a>.</p>
</div>
</div>
+19
View File
@@ -295,6 +295,25 @@ Attribute changes were verified with `qmake6 ../dbc.pro`, `make -j4`, and
passed. The standalone C++17 tree test also passed. The existing named
comma-decimal C locale test skipped because the locale is not installed.
## Long signal definitions
`longSignalDefinitions` reproduces the former stack overflow with a 50,000-character
unit string. Both parser APIs are exercised with long units, signal names,
receivers, decimal numbers, and a list of 10,001 receivers. Valid input must parse
without truncating units; malformed input (including missing quotes, delimiters,
receiver separators, numeric suffixes, overflow, and trailing receiver commas)
must return an empty database and an `InvalidStatement` diagnostic at the signal's
source line, or throw a source-located error through `ParseFile()`.
These cases run as part of the existing parser target and sanitizer builds.
Verified with Qt 6.8.2 in separate Release and ASan/UBSan builds, both with
`CONFIG+=dbc_qt`: `make check` passed 2,409 core QtTest checks, seven model checks,
and the qmake tree test in each build. The named comma-decimal C locale test
skipped because the required locale is not installed. The sanitizer run used
`ASAN_OPTIONS=detect_leaks=0:halt_on_error=1` and `UBSAN_OPTIONS=halt_on_error=1`;
address and undefined-behavior checks passed, while leak checking was disabled
because of the environment's previously documented ptrace restriction.
## Extended validation
`attributeNumbers` checks signed 64-bit limits, leading plus signs, decimal HEX
+52
View File
@@ -116,6 +116,8 @@ private Q_SLOTS:
void integration();
void invalidSignals();
void validSignals();
void longSignalDefinitions_data();
void longSignalDefinitions();
void physicalNumbersCppLocale();
void physicalNumbersCLocale();
void dispatch();
@@ -1146,6 +1148,56 @@ void DbcParserTest::validSignals() {
} catch (const std::exception &error) { CHECK(false, error.what()); }
}
void DbcParserTest::longSignalDefinitions_data() {
QTest::addColumn<std::string>("line");
QTest::addColumn<bool>("valid");
QTest::addColumn<std::string>("unit");
const std::string longText(50000U, 'x');
const std::string prefix = "SG_ Value : 0|8@1+ (1,0) [0|255] ";
QTest::newRow("long-unit") << prefix + "\"" + longText + "\" ECU" << true << longText;
QTest::newRow("unterminated-unit") << prefix + "\"" + longText << false << std::string();
QTest::newRow("missing-receiver-separator") << prefix + "\"" + longText + "\"ECU" << false << std::string();
QTest::newRow("long-name") << SignalLine("0", "8", "1+", "1", "0", "0", "255", longText) << true << std::string();
QTest::newRow("long-receiver") << prefix + "\"\" " + longText << true << std::string();
std::string receivers = "ECU";
for (unsigned index = 0U; index < 10000U; ++index)
receivers += ",ECU";
QTest::newRow("many-receivers") << prefix + "\"\" " + receivers << true << std::string();
QTest::newRow("trailing-receiver-comma") << prefix + "\"\" " + receivers + "," << false << std::string();
QTest::newRow("long-factor") << SignalLine("0", "8", "1+", std::string(50000U, '0') + "1", "0", "0", "255") << true << std::string();
QTest::newRow("invalid-long-factor") << SignalLine("0", "8", "1+", std::string(50000U, '0') + "1x", "0", "0", "255") << false << std::string();
QTest::newRow("overflowing-start-bit") << SignalLine(std::string(50000U, '9'), "8", "1+", "1", "0", "0", "255") << false << std::string();
QTest::newRow("missing-colon") << "SG_ " + longText << false << std::string();
}
void DbcParserTest::longSignalDefinitions() {
QFETCH(std::string, line);
QFETCH(bool, valid);
QFETCH(std::string, unit);
Fixture fixture;
fixture.Write("BO_ 1 Frame: 1 ECU\n" + line + "\n");
const DbcParser parser;
const DbcParseResult result = parser.ParseFileWithDiagnostics(fixture.path.string());
QCOMPARE(result.HasErrors(), !valid);
if (valid) {
QVERIFY(result.diagnostics.empty());
const DbcDatabase database = parser.ParseFile(fixture.path.string());
QCOMPARE(database.frames.size(), std::size_t(1));
QCOMPARE(database.frames[0].signals.size(), std::size_t(1));
QCOMPARE(database.frames[0].signals[0].unit, unit);
QCOMPARE(result.database.frames[0].signals[0].unit, unit);
QCOMPARE(database.frames[0].signals[0].factor, 1.0);
QVERIFY(!database.frames[0].signals[0].receivers.empty());
} else {
QVERIFY(result.database.frames.empty());
QCOMPARE(result.diagnostics.size(), std::size_t(1));
QCOMPARE(result.diagnostics[0].code, DbcDiagnosticCode::InvalidStatement);
QCOMPARE(result.diagnostics[0].lineNumber, std::size_t(2));
QCOMPARE(result.diagnostics[0].filePath, fixture.path.string());
RejectSignal(fixture, line, 1U);
}
}
void DbcParserTest::CheckPhysicalNumbers() {
Fixture fixture;
struct PhysicalCase {