From 1819374b9a0a66d8e59926bb417963c3d55919be Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Thu, 30 Dec 2021 14:33:49 +0000
Subject: [PATCH] Use SimpleMessage for Log4J2 for security, close #1729

---
 .../internal/utils/LoggerAdapterImpls.kt      | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/mirai-core-api/src/commonMain/kotlin/internal/utils/LoggerAdapterImpls.kt b/mirai-core-api/src/commonMain/kotlin/internal/utils/LoggerAdapterImpls.kt
index 866309687..6c0c9f5fc 100644
--- a/mirai-core-api/src/commonMain/kotlin/internal/utils/LoggerAdapterImpls.kt
+++ b/mirai-core-api/src/commonMain/kotlin/internal/utils/LoggerAdapterImpls.kt
@@ -12,6 +12,9 @@ package net.mamoe.mirai.internal.utils
 import net.mamoe.mirai.utils.MiraiLoggerPlatformBase
 import org.apache.logging.log4j.Marker
 import org.apache.logging.log4j.MarkerManager
+import org.apache.logging.log4j.message.Message
+import org.apache.logging.log4j.message.SimpleMessage
+import org.apache.logging.log4j.message.SimpleMessageFactory
 import java.util.logging.Level as JulLevel
 import java.util.logging.Logger as JulLogger
 
@@ -19,35 +22,36 @@ internal class Log4jLoggerAdapter(
     private val logger: org.apache.logging.log4j.Logger,
     override val marker: Marker?,
 ) : MiraiLoggerPlatformBase(), MarkedMiraiLogger {
+    val factory: SimpleMessageFactory = SimpleMessageFactory.INSTANCE
 
     override fun verbose0(message: String?, e: Throwable?) {
         val marker = marker
-        if (marker != null) logger.trace(marker, message, e)
-        else logger.trace(message, e)
+        if (marker != null) logger.trace(marker, factory.newMessage(message), e)
+        else logger.trace(factory.newMessage(message), e)
     }
 
     override fun debug0(message: String?, e: Throwable?) {
         val marker = marker
-        if (marker != null) logger.debug(marker, message, e)
-        else logger.debug(message, e)
+        if (marker != null) logger.debug(marker, factory.newMessage(message), e)
+        else logger.debug(factory.newMessage(message), e)
     }
 
     override fun info0(message: String?, e: Throwable?) {
         val marker = marker
-        if (marker != null) logger.info(marker, message, e)
-        else logger.info(message, e)
+        if (marker != null) logger.info(marker, factory.newMessage(message), e)
+        else logger.info(factory.newMessage(message), e)
     }
 
     override fun warning0(message: String?, e: Throwable?) {
         val marker = marker
-        if (marker != null) logger.warn(marker, message, e)
-        else logger.warn(message, e)
+        if (marker != null) logger.warn(marker, factory.newMessage(message), e)
+        else logger.warn(factory.newMessage(message), e)
     }
 
     override fun error0(message: String?, e: Throwable?) {
         val marker = marker
-        if (marker != null) logger.error(marker, message, e)
-        else logger.error(message, e)
+        if (marker != null) logger.error(marker, factory.newMessage(message), e)
+        else logger.error(factory.newMessage(message), e)
     }
 
     override val isVerboseEnabled: Boolean get() = logger.isTraceEnabled