From 59bb973aa4b329fa31ce2350d4d361ddf32a5706 Mon Sep 17 00:00:00 2001 From: Min Jin Date: Wed, 21 Oct 2026 20:53:20 -0700 Subject: [PATCH] fix(util): guard Taints.findTaint against null node spec/taints findTaint iterated node.getSpec().getTaints() with no null check, throwing a NullPointerException for a node that has no spec (or whose taints list is null) instead of reporting that no matching taint exists. The sibling removeTaint methods already guard a null spec, so this was an inconsistent null-safety gap. Return null when the spec or taints list is absent, and add a focused unit test covering a node without a spec. --- .../java/io/kubernetes/client/util/taints/Taints.java | 3 +++ .../java/io/kubernetes/client/util/taints/TaintsTest.java | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/util/src/main/java/io/kubernetes/client/util/taints/Taints.java b/util/src/main/java/io/kubernetes/client/util/taints/Taints.java index d45679e087..e08af3db37 100644 --- a/util/src/main/java/io/kubernetes/client/util/taints/Taints.java +++ b/util/src/main/java/io/kubernetes/client/util/taints/Taints.java @@ -38,6 +38,9 @@ public String toString() { } public static V1Taint findTaint(V1Node node, String key, Effect effect) { + if (node.getSpec() == null || node.getSpec().getTaints() == null) { + return null; + } for (V1Taint taint : node.getSpec().getTaints()) { if (taint.getKey().equals(key) && taint.getEffect().equals(effect.toString())) { return taint; diff --git a/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java b/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java index 7521dd0988..05d6317d5f 100644 --- a/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java +++ b/util/src/test/java/io/kubernetes/client/util/taints/TaintsTest.java @@ -65,4 +65,12 @@ void noExecuteTaints() { assertThat(Taints.findTaint(node, "key1", Taints.Effect.NO_EXECUTE).getEffect()) .isEqualTo(effect); } + + @Test + void findTaintWithoutSpecReturnsNull() { + // A node without a spec (or without a taints list) must not NPE; it simply has no taints, + // consistent with the null-spec handling in removeTaint. + V1Node node = new V1Node(); + assertThat(Taints.findTaint(node, "key1", Taints.Effect.NO_SCHEDULE)).isNull(); + } }