Skip to content

Commit b54a9af

Browse files
committed
[C++] Check the length passed to put method for var length strings.
Passing nullptr as src to std::memcpy is undefined behavior even if the length is zero is undefined behavior.
1 parent 2f698d2 commit b54a9af

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,9 +531,12 @@ private void generateVarData(
531531
indent + " %3$s lengthFieldValue = %4$s(length);\n" +
532532
indent + " sbePosition(lengthPosition + lengthOfLengthField);\n" +
533533
indent + " std::memcpy(m_buffer + lengthPosition, &lengthFieldValue, sizeof(%3$s));\n" +
534-
indent + " std::uint64_t pos = sbePosition();\n" +
535-
indent + " sbePosition(pos + length);\n" +
536-
indent + " std::memcpy(m_buffer + pos, src, length);\n" +
534+
indent + " if (length != %3$s(0))" +
535+
indent + " {" +
536+
indent + " std::uint64_t pos = sbePosition();\n" +
537+
indent + " sbePosition(pos + length);\n" +
538+
indent + " std::memcpy(m_buffer + pos, src, length);\n" +
539+
indent + " }" +
537540
indent + " return *this;\n" +
538541
indent + " }\n",
539542
propertyName,

0 commit comments

Comments
 (0)