[Bro-Dev] [BinPac] ParserBuffer with case not producing correct code
Martina Balintova
balint.martina at gmail.com
Thu Jun 5 03:54:56 PDT 2014
Hi,
binpac parser for flow (flowunit) has probably small bug. In my
foo-protocol.pac, I have record like this:
// foo.pac
flow FOO_Flow(is_orig: bool)
{
flowunit = FOO_PDU(is_orig) withcontext(connection, this);
};
// foo-protocol.pac
type FOO_PDU(is_orig: bool) = record {
header: FOO_Header(is_orig);
xbody: case header.flag of {
1 -> plain_body: FOO_Body(header);
0 -> encrypt_body: Encrypted_Body;
} &length = header.length &requires (header.flag);
} &byteorder = bigendian;
Code that I am getting after binpac parsing is something like this:
FOO_PDU::FOO_PDU(bool is_orig)
{
header_ = 0;
xbody_case_index_ = -1;
plain_body_ = 0;
encrypt_body_ = 0;
buffering_state_ = 0;
buffering_state_ = 0;
is_orig_ = is_orig;
byteorder_ = bigendian;
proc_foo_header_ = 0;
parsing_state_ = 0;
parsing_state_ = 0;
}
bool FOO_PDU::ParseBuffer(flow_buffer_t t_flow_buffer, ContextFOO *
t_context)
{
// SOME CODE ...
// switch ( parsing_state_ ) {
// ... case 0: ...
case 1:
{
bool t_header_parsing_complete;
t_header_parsing_complete = false;
while ( ! t_header_parsing_complete &&
t_flow_buffer->ready() )
{
// SOME MORE CODE
}
if ( ! (t_header_parsing_complete) )
goto need_more_data;
}
// Parse "xbody"
if ( ! xbody_ )
{
}
// SOME MORE CODE here
As you can see, compiler is complaining that error: ‘xbody_’ was not
declared in this scope. It is missing in constructor of FOO_PDU. When I
checked snmp analyzer, It is doing this process correctly in
int v3Header::Parse(const_byteptr const t_begin_of_data, const_byteptr
const t_end_of_data, ContextSNMP * t_context)
- it does not check for scoped_pdu_data_.
Could you help me to find out what am I doing incorrectly?
Thank you
Martina
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.icsi.berkeley.edu/pipermail/bro-dev/attachments/20140605/20c94b3d/attachment.html
More information about the bro-dev
mailing list