From 03a7536737ddab023165b7d00bac765b18ae4ce3 Mon Sep 17 00:00:00 2001 From: "void-box[bot]" Date: Wed, 18 Feb 2026 19:44:54 +0000 Subject: [PATCH] fix: apply code review improvements from void-box analysis --- .../java/io/github/dpsoft/ap/command/Command.java | 12 ++++++++++-- .../io/github/dpsoft/ap/functions/Functions.java | 7 ++++--- .../io/github/dpsoft/ap/util/ProfilerExecutor.java | 7 +++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/github/dpsoft/ap/command/Command.java b/src/main/java/io/github/dpsoft/ap/command/Command.java index ae7ddd0..12c49e7 100644 --- a/src/main/java/io/github/dpsoft/ap/command/Command.java +++ b/src/main/java/io/github/dpsoft/ap/command/Command.java @@ -57,8 +57,16 @@ private static String getEventType(String segment, Map params, O } private static Duration getDuration(Map params) { - if (params.get("duration") != null) return Duration.ofSeconds(Long.parseLong(params.get("duration"))); - if (params.get("seconds") != null) return Duration.ofSeconds(Long.parseLong(params.get("seconds"))); + String raw = params.get("duration"); + if (raw == null) raw = params.get("seconds"); + if (raw != null) { + try { + long secs = Long.parseLong(raw); + if (secs > 0) return Duration.ofSeconds(secs); + } catch (NumberFormatException ignored) { + // fall through to default + } + } return Duration.ofSeconds(30); // default value } diff --git a/src/main/java/io/github/dpsoft/ap/functions/Functions.java b/src/main/java/io/github/dpsoft/ap/functions/Functions.java index 5102b32..d2c4cf5 100644 --- a/src/main/java/io/github/dpsoft/ap/functions/Functions.java +++ b/src/main/java/io/github/dpsoft/ap/functions/Functions.java @@ -20,9 +20,10 @@ public static Map splitQueryParams(URI uri) { for (String pair : pairs) { final int idx = pair.indexOf("="); - final var key = pair.substring(0, idx); - final var value = pair.substring(idx + 1); - queryPairs.put(URLDecoder.decode(key, StandardCharsets.UTF_8), URLDecoder.decode(value, StandardCharsets.UTF_8)); + if (idx < 0) continue; // skip valueless params + final var key = URLDecoder.decode(pair.substring(0, idx), StandardCharsets.UTF_8); + final var value = URLDecoder.decode(pair.substring(idx + 1), StandardCharsets.UTF_8); + queryPairs.put(key, value); } return queryPairs; } diff --git a/src/main/java/io/github/dpsoft/ap/util/ProfilerExecutor.java b/src/main/java/io/github/dpsoft/ap/util/ProfilerExecutor.java index a810a0b..f01b6aa 100644 --- a/src/main/java/io/github/dpsoft/ap/util/ProfilerExecutor.java +++ b/src/main/java/io/github/dpsoft/ap/util/ProfilerExecutor.java @@ -42,8 +42,11 @@ private ProfilerExecutor(AsyncProfiler profiler, Command command) { public Try run() { return Try.of(() -> { profiler.execute(command.asFormatString(file.getAbsolutePath())); - Thread.sleep(command.getDuration().toMillis()); - profiler.stop(); + try { + Thread.sleep(command.getDuration().toMillis()); + } finally { + profiler.stop(); // always stop, even on interrupt + } return this; }); }