Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[C++] Invalid state management in generated code with precedence checks. #1031

Closed
szymonwieloch opened this issue Dec 9, 2024 · 1 comment

Comments

@szymonwieloch
Copy link

After enabling precedence checks (sbe.enable.precedence.checks=true) part of the generated code does not work because of mistakes in the internal state management.

For example this will not work:

MessageType msg(buffer, len);
std::cout << msg;

Will throw an exception indicating incorrect use of attributes. What seems to be the root cause of the problem is initialization of the m_codedState variable inside the constructor. Because it is not set explicitly by the constructor(inside the operator << body), it's value becomes:

CodecState m_codecState = CodecState::NOT_WRAPPED;

Which is obviously invalid as the constructor wraps the underlying buffer. It seems that the root cause is not setting the correct value of the m_codecState in the wrapping constructors.

ZachBray added a commit that referenced this issue Dec 11, 2024
There were a couple of problems here:

1. "wrapping constructors" did not initialize the codec state (for
precedence checks) correctly, and
2. the methods returning a JSON encoded string would attempt to
transition twice.

These problems are now resolved.

I have also made a technically breaking change. I have removed an
unnecessary constructor that took in the codec state. I think it is
highly unlikely that anyone was using this constructor; therefore,
it should be okay to make the change.
@ZachBray
Copy link
Contributor

Thank you for this and the other reports. I've raised PR #1033 to address this issue.

vyazelenko pushed a commit that referenced this issue Dec 11, 2024
There were a couple of problems here:

1. "wrapping constructors" did not initialize the codec state (for
precedence checks) correctly, and
2. the methods returning a JSON encoded string would attempt to
transition twice.

These problems are now resolved.

I have also made a technically breaking change. I have removed an
unnecessary constructor that took in the codec state. I think it is
highly unlikely that anyone was using this constructor; therefore,
it should be okay to make the change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants