From f7ea448256cdb9f3bbcd463a98b196051048c4a8 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 8 Jul 2019 16:15:45 +0200 Subject: [PATCH] ui/app: (android) fix length of C string copy The data dir string is returned to Go as a byte array of the UTF-8 encoded string, but it is not NUL terminated. Signed-off-by: Elias Naur --- ui/app/datadir_android.go | 4 ++-- ui/app/os_android.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ui/app/datadir_android.go b/ui/app/datadir_android.go index ad206637..2e5901d4 100644 --- a/ui/app/datadir_android.go +++ b/ui/app/datadir_android.go @@ -9,8 +9,8 @@ import "C" var dataDir func() (string, error) //export setDataDir -func setDataDir(cdir *C.char) { - dir := C.GoString(cdir) +func setDataDir(cdir *C.char, len C.int) { + dir := C.GoStringN(cdir, len) dataDir = func() (string, error) { return dir, nil } diff --git a/ui/app/os_android.c b/ui/app/os_android.c index 1ab1f7ce..5e6d0094 100644 --- a/ui/app/os_android.c +++ b/ui/app/os_android.c @@ -106,7 +106,8 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { if (dir == NULL) { return -1; } - setDataDir((char *)dir); + jint n = (*env)->GetArrayLength(env, dirArr); + setDataDir((char *)dir, n); (*env)->ReleaseByteArrayElements(env, dirArr, dir, JNI_ABORT); return JNI_VERSION_1_6;