Skip to content

Commit f520ad6

Browse files
committed
[C#] Check max group size is not exceeded.
1 parent f72be51 commit f520ad6

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,23 +197,32 @@ private void generateGroupClassHeader(
197197

198198
final int blockLength = tokens.get(index).encodedLength();
199199
final String typeForBlockLength = cSharpTypeName(tokens.get(index + 2).encoding().primitiveType());
200-
final String typeForNumInGroup = cSharpTypeName(tokens.get(index + 3).encoding().primitiveType());
200+
final Token numInGroupToken = tokens.get(index + 3);
201+
final String typeForNumInGroup = cSharpTypeName(numInGroupToken.encoding().primitiveType());
201202

202203
sb.append(String.format("\n" +
203204
indent + INDENT + "public void WrapForEncode(%1$s parentMessage, DirectBuffer buffer, int count)\n" +
204205
indent + INDENT + "{\n" +
206+
indent + INDENT + INDENT + "if (count < %2$d || count > %3$d)\n" +
207+
indent + INDENT + INDENT + "{\n" +
208+
indent + INDENT + INDENT + INDENT + "throw new ArgumentOutOfRangeException(\"count\",\n" +
209+
indent + INDENT + INDENT + INDENT + INDENT + "\"Outside allowed range: count=\" + count +\n" +
210+
indent + INDENT + INDENT + INDENT + INDENT + "\", min=%2$d, max=%3$d\");\n" +
211+
indent + INDENT + INDENT + "}\n\n" +
205212
indent + INDENT + INDENT + "_parentMessage = parentMessage;\n" +
206213
indent + INDENT + INDENT + "_buffer = buffer;\n" +
207214
indent + INDENT + INDENT + "_dimensions.Wrap(buffer, parentMessage.Limit, _actingVersion);\n" +
208-
indent + INDENT + INDENT + "_dimensions.BlockLength = (%2$s)%3$d;\n" +
209-
indent + INDENT + INDENT + "_dimensions.NumInGroup = (%4$s)count;\n" +
215+
indent + INDENT + INDENT + "_dimensions.BlockLength = (%4$s)%5$d;\n" +
216+
indent + INDENT + INDENT + "_dimensions.NumInGroup = (%6$s)count;\n" +
210217
indent + INDENT + INDENT + "_index = -1;\n" +
211218
indent + INDENT + INDENT + "_count = count;\n" +
212-
indent + INDENT + INDENT + "_blockLength = %3$d;\n" +
219+
indent + INDENT + INDENT + "_blockLength = %5$d;\n" +
213220
indent + INDENT + INDENT + "_actingVersion = SchemaVersion;\n" +
214221
indent + INDENT + INDENT + "parentMessage.Limit = parentMessage.Limit + SbeHeaderSize;\n" +
215222
indent + INDENT + "}\n",
216223
parentMessageClassName,
224+
numInGroupToken.encoding().applicableMinValue().longValue(),
225+
numInGroupToken.encoding().applicableMaxValue().longValue(),
217226
typeForBlockLength,
218227
blockLength,
219228
typeForNumInGroup));

0 commit comments

Comments
 (0)