ReviewOS

also looking at this

craft-native/craft

fix(android): text going to the JVM is modified UTF-8, and was not being

#168
Merged chris wants to merge fix/android-modified-utf8 into main
12 files +326 -136
packages/zig/src/bridge_android_contacts.zigmodified+8-15
Changes to packages/zig/src/bridge_android_contacts.zig
@@ -270,7 +270,7 @@ fn queryUri(
270270 for (args, 0..) |arg, i| {
271271 // A null argument is a null element, which is what
272272 // `arrayOf(contactId)` produces when the id was null.
273 const value: jni.jstring = if (arg) |text| try javaString(j, allocator, text) else null;
273 const value: jni.jstring = if (arg) |text| try j.newStringUtf8(allocator, text) else null;
274274 try j.setObjectArrayElement(array, i, value);
275275 }
276276 break :blk array;
@@ -286,9 +286,9 @@ fn queryUri(
286286 &.{
287287 .{ .l = uri },
288288 .{ .l = null },
289 .{ .l = if (selection) |text| try javaString(j, allocator, text) else null },
289 .{ .l = if (selection) |text| try j.newStringUtf8(allocator, text) else null },
290290 .{ .l = args_array },
291 .{ .l = if (sort_order) |text| try javaString(j, allocator, text) else null },
291 .{ .l = if (sort_order) |text| try j.newStringUtf8(allocator, text) else null },
292292 },
293293 );
294294}
@@ -300,7 +300,7 @@ fn columnIndex(j: Jni, allocator: std.mem.Allocator, cursor: jobject, name: []co
300300 return j.callIntMethodA(
301301 cursor,
302302 try j.methodId(try j.objectClass(cursor), "getColumnIndexOrThrow", "(Ljava/lang/String;)I"),
303 &.{.{ .l = try javaString(j, allocator, name) }},
303 &.{.{ .l = try j.newStringUtf8(allocator, name) }},
304304 );
305305}
306306
@@ -316,13 +316,6 @@ fn columnText(
316316 return try j.stringToUtf8(allocator, value);
317317}
318318
319fn javaString(j: Jni, allocator: std.mem.Allocator, text: []const u8) !jni.jstring {
320 const terminated = try allocator.allocSentinel(u8, text.len, 0);
321 defer allocator.free(terminated);
322 @memcpy(terminated, text);
323 return j.newStringUtf(terminated.ptr);
324}
325
326319// =============================================================================
327320// addContact
328321// =============================================================================
@@ -471,7 +464,7 @@ pub fn addContact(j: Jni, allocator: std.mem.Allocator, activity: jobject, conta
471464 "(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;",
472465 ),
473466 &.{
474 .{ .l = try javaString(j, allocator, contacts_authority) },
467 .{ .l = try j.newStringUtf8(allocator, contacts_authority) },
475468 .{ .l = ops },
476469 },
477470 );
@@ -535,11 +528,11 @@ fn appendDataRow(
535528 "withValueBackReference",
536529 "(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;",
537530 ),
538 &.{ .{ .l = try javaString(j, allocator, col_raw_contact_id) }, .{ .i = 0 } },
531 &.{ .{ .l = try j.newStringUtf8(allocator, col_raw_contact_id) }, .{ .i = 0 } },
539532 );
540533
541534 _ = try withValue(j, allocator, builder, col_mimetype, item_type);
542 _ = try withValue(j, allocator, builder, row.value_column, try javaString(j, allocator, row.value));
535 _ = try withValue(j, allocator, builder, row.value_column, try j.newStringUtf8(allocator, row.value));
543536
544537 if (row.type_value) |type_value| {
545538 const integer_cls = try j.findClass("java/lang/Integer");
@@ -581,7 +574,7 @@ fn withValue(
581574 "withValue",
582575 "(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;",
583576 ),
584 &.{ .{ .l = try javaString(j, allocator, column) }, .{ .l = value } },
577 &.{ .{ .l = try j.newStringUtf8(allocator, column) }, .{ .l = value } },
585578 );
586579}
587580