From 74175ddfa03077cadda720b409f7c5c0a5756ecc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 20 Feb 2020 10:12:07 +0100 Subject: [PATCH] Add a test and create extension for Byte to avoid using UByte (still experimental) --- .../crypto/verification/qrcode/QrCodeTest.kt | 12 +++++++++ .../crypto/verification/qrcode/Extensions.kt | 13 +++------- .../matrix/android/internal/util/Byte.kt | 25 +++++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Byte.kt diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/qrcode/QrCodeTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/qrcode/QrCodeTest.kt index 7e835385cc..ced7896aa3 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/qrcode/QrCodeTest.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/qrcode/QrCodeTest.kt @@ -234,6 +234,18 @@ class QrCodeTest : InstrumentedTest { expected.toQrCodeData() shouldEqual qrCode } + @Test + fun testAnyTransactionId() { + for (qty in 0 until 0x1FFF step 200) { + val longTransactionId = "a".repeat(qty) + + val qrCode = qrCode1.copy(transactionId = longTransactionId) + + // Symmetric operation + qrCode.toEncodedString().toQrCodeData() shouldEqual qrCode + } + } + // Error cases @Test fun testErrorHeader() { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/qrcode/Extensions.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/qrcode/Extensions.kt index b1da4a228c..f6cc5b1be1 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/qrcode/Extensions.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/qrcode/Extensions.kt @@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.crypto.verification.qrcode import im.vector.matrix.android.internal.crypto.crosssigning.fromBase64NoPadding import im.vector.matrix.android.internal.crypto.crosssigning.toBase64NoPadding +import im.vector.matrix.android.internal.util.toPositiveInt // MATRIX private val prefix = "MATRIX".toByteArray(Charsets.ISO_8859_1) @@ -94,8 +95,8 @@ fun String.toQrCodeData(): QrCodeData? { cursor++ // Get transaction length - val bigEndian1 = ensurePositive(byteArray[cursor]) - val bigEndian2 = ensurePositive(byteArray[cursor + 1]) + val bigEndian1 = byteArray[cursor].toPositiveInt() + val bigEndian2 = byteArray[cursor + 1].toPositiveInt() val transactionLength = bigEndian1 * 0x0100 + bigEndian2 @@ -124,11 +125,3 @@ fun String.toQrCodeData(): QrCodeData? { else -> null } } - -fun ensurePositive(byte: Byte): Int { - return if (byte < 0) { - 256 + byte - } else { - byte.toInt() - } -} diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Byte.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Byte.kt new file mode 100644 index 0000000000..77f28e17e5 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/util/Byte.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.matrix.android.internal.util + +fun Byte.toPositiveInt(): Int { + return if (this < 0) { + 256 + this + } else { + toInt() + } +}