Skip to content

Commit e6c4c7c

Browse files
Copilotarnaudroques
andcommitted
Address code review feedback
- Use NullOutputStream for check endpoint to avoid generating image data - Fix array access in metadata extraction to prevent IndexOutOfBoundsException - Add defensive checks for split operations Co-authored-by: arnaudroques <467517+arnaudroques@users.noreply.github.com>
1 parent 1ee2fef commit e6c4c7c

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/main/java/net/sourceforge/plantuml/servlet/mcp/McpServlet.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,9 @@ private void handleCheck(JsonObject requestBody, HttpServletResponse response)
261261
try {
262262
// Try to parse the diagram to check for syntax errors
263263
SourceStringReader reader = new SourceStringReader(source);
264-
// Use a null output stream to just validate
265-
reader.outputImage(new ByteArrayOutputStream(), 0, new FileFormatOption(FileFormat.PNG));
264+
// Use NullOutputStream to avoid generating actual image data
265+
reader.outputImage(new net.sourceforge.plantuml.servlet.utility.NullOutputStream(),
266+
0, new FileFormatOption(FileFormat.PNG));
266267

267268
Map<String, Object> result = new HashMap<>();
268269
result.put("ok", true);
@@ -301,16 +302,22 @@ private void handleMetadata(JsonObject requestBody, HttpServletResponse response
301302
// Extract participant names from arrow notations
302303
String[] parts = line.split("->");
303304
for (String part : parts) {
304-
String name = part.trim().split("\\s")[0].replaceAll("[^a-zA-Z0-9_]", "");
305-
if (!name.isEmpty() && !participants.contains(name)) {
306-
participants.add(name);
305+
String trimmed = part.trim();
306+
if (!trimmed.isEmpty()) {
307+
String[] tokens = trimmed.split("\\s+");
308+
if (tokens.length > 0) {
309+
String name = tokens[0].replaceAll("[^a-zA-Z0-9_]", "");
310+
if (!name.isEmpty() && !participants.contains(name)) {
311+
participants.add(name);
312+
}
313+
}
307314
}
308315
}
309316
} else if (line.matches("^(class|interface|entity|participant)\\s+[a-zA-Z0-9_]+.*")) {
310317
String[] parts = line.split("\\s+");
311318
if (parts.length >= 2) {
312319
String name = parts[1].replaceAll("[^a-zA-Z0-9_]", "");
313-
if (!participants.contains(name)) {
320+
if (!name.isEmpty() && !participants.contains(name)) {
314321
participants.add(name);
315322
}
316323
}

0 commit comments

Comments
 (0)