Don't crash on large IPC control messages #119
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This addresses https://dev.icinga.com/issues/13655
The issue is that IPC is done using JSON documents. When spawning an external process, the buffer containing this information (including parameters and environment variables) is limited to 4096 bytes and any further data is truncated. When the JSON is truncated, it fails to properly parse which leads to an assertion failure.
This solves the issue by sending the length of the document first, allowing the client to allocate a proper buffer and to fully read the buffer.
I was not able to test this as we rolled back our system to a previous version, but I can verify it compiles. This PR should stand as a suggestion as to how to do it. I haven't programmed in C/C++ in ~6 years so please be gentle.