From 1b2651c6434ff625faae06c86757674707fc1bd3 Mon Sep 17 00:00:00 2001 From: Wu-Hui Date: Tue, 13 Jul 2021 11:19:55 -0400 Subject: [PATCH 1/2] Ensures bundles are encoded as UTF8 bytes. --- .../java/com/google/cloud/firestore/FirestoreBundle.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java index 5804610ea..ccad1bbbe 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java @@ -28,6 +28,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.util.JsonFormat; import java.nio.ByteBuffer; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; @@ -39,6 +40,7 @@ public final class FirestoreBundle { static final int BUNDLE_SCHEMA_VERSION = 1; // Printer to encode protobuf objects into JSON string. private static final JsonFormat.Printer PRINTER = JsonFormat.printer(); + private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; // Raw byte array to hold the content of the bundle. private byte[] bundleData; @@ -182,12 +184,12 @@ public FirestoreBundle build() { .setCreateTime(latestReadTime.toProto()) .setVersion(BUNDLE_SCHEMA_VERSION) .setTotalDocuments(documents.size()) - .setTotalBytes(buffer.toString().getBytes().length) + .setTotalBytes(buffer.toString().getBytes(DEFAULT_CHARSET).length) .build(); BundleElement element = BundleElement.newBuilder().setMetadata(metadata).build(); buffer.insert(0, elementToLengthPrefixedStringBuilder(element)); - return new FirestoreBundle(buffer.toString().getBytes(StandardCharsets.UTF_8)); + return new FirestoreBundle(buffer.toString().getBytes(DEFAULT_CHARSET)); } private StringBuilder elementToLengthPrefixedStringBuilder(BundleElement element) { @@ -197,7 +199,7 @@ private StringBuilder elementToLengthPrefixedStringBuilder(BundleElement element } catch (InvalidProtocolBufferException e) { throw new RuntimeException(e); } - return new StringBuilder().append(elementJson.getBytes().length).append(elementJson); + return new StringBuilder().append(elementJson.getBytes(DEFAULT_CHARSET).length).append(elementJson); } } From 3fb07014df86322731651b6e66d166835b2e6bd8 Mon Sep 17 00:00:00 2001 From: Wu-Hui Date: Tue, 13 Jul 2021 11:36:10 -0400 Subject: [PATCH 2/2] fix: Formatted. --- .../main/java/com/google/cloud/firestore/FirestoreBundle.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java index ccad1bbbe..f28c1aab9 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java @@ -199,7 +199,9 @@ private StringBuilder elementToLengthPrefixedStringBuilder(BundleElement element } catch (InvalidProtocolBufferException e) { throw new RuntimeException(e); } - return new StringBuilder().append(elementJson.getBytes(DEFAULT_CHARSET).length).append(elementJson); + return new StringBuilder() + .append(elementJson.getBytes(DEFAULT_CHARSET).length) + .append(elementJson); } }