From 42ba0a4aabff07831b8087915c81a7550a303724 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Mon, 2 Dec 2024 17:08:46 +0700 Subject: [PATCH 1/2] refactor(mac): pass kmx data blob to keyman core instead of file path Fixes: #12499 --- .../CoreWrapper/CoreWrapper.m | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m index c1cd9b81f85..adcf8c14b60 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m @@ -110,11 +110,22 @@ -(void) dealloc{ -(void)loadKeyboardUsingCore:(NSString*) path { km_core_path_name keyboardPath = [path UTF8String]; - km_core_status result = km_core_keyboard_load(keyboardPath, &_coreKeyboard); + NSError* dataError = nil; + NSData *data = [NSData dataWithContentsOfFile:path options:0 error:&dataError]; - if (result != KM_CORE_STATUS_OK) { - NSString *message = [NSString stringWithFormat:@"Unexpected Keyman Core result: %u", result]; - [NSException raise:@"LoadKeyboardException" format:@"%@", message]; + if (dataError != nil) { + os_log_error([KMELogs coreLog], "loadKeyboardUsingCore, path: %{public}@\n dataError: %{public}@", path, dataError); + } else { + NSUInteger dataLength = data.length; + os_log_info([KMELogs coreLog], "loadKeyboardUsingCore, path: %{public}@\n dataLength: %lu", path, dataLength); + + km_core_status result = km_core_keyboard_load_from_blob(keyboardPath, + data.bytes, dataLength, &_coreKeyboard); + if (result != KM_CORE_STATUS_OK) { + NSString *message = [NSString stringWithFormat:@"Unexpected Keyman Core result: %u", result]; + os_log_error([KMELogs coreLog], "loadKeyboardUsingCore, path: %{public}@\n core result: %{public}@", path, message); + [NSException raise:@"LoadKeyboardException" format:@"%@", message]; + } } } @@ -126,7 +137,7 @@ -(void)readKeyboardAttributesUsingCore { if (result==KM_CORE_STATUS_OK) { _keyboardVersion = [self.coreHelper createNSStringFromUnicharString:keyboardAttributes->version_string]; _keyboardId = [self.coreHelper createNSStringFromUnicharString:keyboardAttributes->id]; - os_log_debug([KMELogs coreLog], "readKeyboardAttributesUsingCore, keyboardVersion: %{public}@\n, keyboardId: %{public}@\n", _keyboardVersion, _keyboardId); + os_log_debug([KMELogs coreLog], "readKeyboardAttributesUsingCore, keyboardVersion: %{public}@, keyboardId: %{public}@\n", _keyboardVersion, _keyboardId); } else { os_log_error([KMELogs coreLog], "km_core_keyboard_get_attrs() failed with result = %u\n", result); } From 8bc144b6d1d2affb295466ead2350ce745dc1acc Mon Sep 17 00:00:00 2001 From: sgschantz Date: Tue, 3 Dec 2024 10:48:57 +0700 Subject: [PATCH 2/2] refactor(mac): raise exception when unable to read kmx data --- mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m | 1 + 1 file changed, 1 insertion(+) diff --git a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m index adcf8c14b60..ed2227f318e 100644 --- a/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m +++ b/mac/KeymanEngine4Mac/KeymanEngine4Mac/CoreWrapper/CoreWrapper.m @@ -115,6 +115,7 @@ -(void)loadKeyboardUsingCore:(NSString*) path { if (dataError != nil) { os_log_error([KMELogs coreLog], "loadKeyboardUsingCore, path: %{public}@\n dataError: %{public}@", path, dataError); + [NSException raise:@"LoadKeyboardException" format:@"%@", dataError]; } else { NSUInteger dataLength = data.length; os_log_info([KMELogs coreLog], "loadKeyboardUsingCore, path: %{public}@\n dataLength: %lu", path, dataLength);