diff --git a/src/main/java/hudson/plugins/ansicolor/AnsiOutputStream.java b/src/main/java/hudson/plugins/ansicolor/AnsiOutputStream.java index 1280383..61c2a06 100644 --- a/src/main/java/hudson/plugins/ansicolor/AnsiOutputStream.java +++ b/src/main/java/hudson/plugins/ansicolor/AnsiOutputStream.java @@ -314,7 +314,10 @@ private boolean processEscapeCommand(ArrayList options, int command) thr processSetForegroundColor(value - 90, true); } else if (100 <= value && value <= 107) { processSetBackgroundColor(value - 100, true); - } else if ((value == 38 || value == 48) && count == 1) { + } else if ((value == 38 || value == 48)) { + if (!optionsIterator.hasNext()) { + continue; + } // extended color like `esc[38;5;m` or `esc[38;2;;;m` int arg2or5 = getNextOptionInt(optionsIterator); if (arg2or5 == 2) { diff --git a/src/test/java/hudson/plugins/ansicolor/AnsiColorBuildWrapperTest.java b/src/test/java/hudson/plugins/ansicolor/AnsiColorBuildWrapperTest.java index a7bf771..c41c1e8 100644 --- a/src/test/java/hudson/plugins/ansicolor/AnsiColorBuildWrapperTest.java +++ b/src/test/java/hudson/plugins/ansicolor/AnsiColorBuildWrapperTest.java @@ -437,9 +437,7 @@ public void canRenderSgrFaintIntensity() { @Test public void canHandleSgrsWithMultipleOptions() { final String input = "\u001B[33mbanana_1 |\u001B[0m 19:59:14.353\u001B[0;38m [debug] Lager installed handler {lager_file_backend,\"banana.log\"} into lager_event\u001B[0m\n"; - final Consumer inputProvider = stream -> stream.println(input); - assertCorrectOutput( Collections.singletonList("banana_1 | 19:59:14.353 [debug] Lager installed handler {lager_file_backend,\"banana.log\"} into lager_event"), Collections.singletonList(ESC), @@ -447,6 +445,21 @@ public void canHandleSgrsWithMultipleOptions() { ); } + @Issue("186") + @Test + public void canHandleSgrsWithRgbColors() { + final String input = "\u001B[1;38;5;4m[fe1.k8sf.atom.us-west-2 ]\u001B[0m\n\u001B[1;38;5;13m[fe1b.k8sf.atom.us-east-2]\u001B[0m"; + final Consumer inputProvider = stream -> stream.println(input); + assertCorrectOutput( + Arrays.asList( + "[fe1.k8sf.atom.us-west-2 ]", + "[fe1b.k8sf.atom.us-east-2]" + ), + Collections.singletonList(ESC), + inputProvider + ); + } + private static String csi(CSI csi) { return csi("", csi); }