diff --git a/src/ZNCDebug.cpp b/src/ZNCDebug.cpp index 9b798454..5e2d1521 100644 --- a/src/ZNCDebug.cpp +++ b/src/ZNCDebug.cpp @@ -29,11 +29,16 @@ CString CDebug::Filter(const CString& sUnfilteredLine) { // If the line is a PASS command to authenticate to a server / znc if (sUnfilteredLine.StartsWith("PASS ")) { + CString sPrefix = sUnfilteredLine.substr(0, sUnfilteredLine[5] == ':' ? 6 : 5); + CString sRest = sUnfilteredLine.substr(sPrefix.length()); + VCString vsSafeCopy; - sUnfilteredLine.Split(":", vsSafeCopy); + sRest.Split(":", vsSafeCopy); if (vsSafeCopy.size() > 1) { - sFilteredLine = vsSafeCopy[0] + ":"; + sFilteredLine = sPrefix + vsSafeCopy[0] + ":"; + } else { + sFilteredLine = sPrefix + ""; } } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2710c742..4b074563 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -61,7 +61,7 @@ add_executable(unittest_bin EXCLUDE_FROM_ALL "ThreadTest.cpp" "NickTest.cpp" "ClientTest.cpp" "NetworkTest.cpp" "MessageTest.cpp" "ModulesTest.cpp" "IRCSockTest.cpp" "QueryTest.cpp" "StringTest.cpp" "ConfigTest.cpp" "BufferTest.cpp" "UtilsTest.cpp" - "UserTest.cpp") + "UserTest.cpp" "DebugTest.cpp") target_link_libraries(unittest_bin PRIVATE znclib) target_include_directories(unittest_bin PRIVATE "${GTEST_ROOT}" "${GTEST_ROOT}/include" diff --git a/test/DebugTest.cpp b/test/DebugTest.cpp new file mode 100644 index 00000000..d335d811 --- /dev/null +++ b/test/DebugTest.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2004-2021 ZNC, see the NOTICE file for details. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +TEST(DebugTest, Filter) { + EXPECT_EQ(CDebug::Filter("JOIN #znc"), "JOIN #znc"); + EXPECT_EQ(CDebug::Filter("PASS hunter2"), "PASS "); + EXPECT_EQ(CDebug::Filter("PASS :hunter2"), "PASS :"); + EXPECT_EQ(CDebug::Filter("PASS user/net:hunter2"), "PASS user/net:"); + EXPECT_EQ(CDebug::Filter("PASS :user/net:hunter2"), "PASS :user/net:"); + EXPECT_EQ(CDebug::Filter("pass hunter2"), "pass "); +}