Skip to content

Commit 661864f

Browse files
fix(core): clear Arena-allocated memory
1 parent 752852e commit 661864f

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

kbigint/src/nativeInterop/cinterop/tommath.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ excludedFunctions = \
4646
mp_read_signed_bin \
4747
mp_to_signed_bin \
4848
mp_to_signed_bin_n \
49+
mp_toradix \
4950
mp_toradix_n
5051

5152
---

kbigint/src/nativeMain/kotlin/io/github/observeroftime/kbigint/KBigInt.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,15 @@ actual class KBigInt private constructor(private var value: mp_int) : Comparable
335335

336336
actual override fun hashCode() = toString().hashCode()
337337

338-
actual override fun toString() = Arena().run {
339-
val result = alloc<ByteVar>()
340-
val size = alloc<ULongVar>()
341-
mp_radix_size(value.ptr, 10, size.ptr.reinterpret()).check()
342-
mp_to_radix(value.ptr, result.ptr, size.value, null, 10).check()
343-
result.ptr.toKString()
338+
actual override fun toString(): String {
339+
val arena = Arena()
340+
val size = arena.alloc<IntVar>()
341+
mp_radix_size(value.ptr, 10, size.ptr).check()
342+
val result = arena.allocArray<ByteVar>(size.value)
343+
mp_to_radix(value.ptr, result, size.value.toULong(), null, 10).check()
344+
val string = result.toKString()
345+
arena.clear()
346+
return string
344347
}
345348

346349
override fun toByte() = kbi_mp_get_byte(value.ptr)

0 commit comments

Comments
 (0)