Reapply "[F] Fix aimedb memory leak"

This reverts commit fec3480963.
This commit is contained in:
Azalea
2026-06-16 01:08:58 +00:00
parent fec3480963
commit 27685087be
2 changed files with 15 additions and 9 deletions

View File

@@ -46,7 +46,7 @@ class AimeDB(
keychipId = readPaddedString(12u) // 14 12b
)
fun ByteBuf.readPaddedString(maxLen: UInt) = readBytes(maxLen.toInt()).toString(US_ASCII).trimEnd('\u0000')
fun ByteBuf.readPaddedString(maxLen: UInt) = readCharSequence(maxLen.toInt(), US_ASCII).toString().trimEnd('\u0000')
data class Handler(val name: String, val fn: (ByteBuf) -> ByteBuf?)

View File

@@ -28,8 +28,11 @@ class AimeDbDecoder : ByteToMessageDecoder() {
// Create a byte array to store the encrypted data
val d = input.readBytes(length)
val result = AimeDbEncryption.decrypt(d)
d.release()
val result = try {
AimeDbEncryption.decrypt(d)
} finally {
d.release()
}
val resultMap = mapOf(
"type" to result.getShortLE(0x04).toInt(),
@@ -50,13 +53,16 @@ class AimeDbDecoder : ByteToMessageDecoder() {
private fun getLength(input: ByteBuf): Int = try {
val currentPos = input.readerIndex()
val result = AimeDbEncryption.decrypt(input)
try {
// Check the header
val header = result.getByte(0).toInt()
assert(header == 0x3e) { "AimeDB: Invalid header $header" }
// Check the header
val header = result.getByte(0).toInt()
assert(header == 0x3e) { "AimeDB: Invalid header $header" }
// Read the length from offset 6
result.getShortLE(currentPos + 6).toInt()
// Read the length from offset 6
result.getShortLE(currentPos + 6).toInt()
} finally {
result.release()
}
} catch (e: Exception) {
logger.info("AimeDB: Invalid request received")
logger.debug("AimeDB: Invalid request received: ${input.toString(Charsets.UTF_8)}")