kopia lustrzana https://github.com/ryukoposting/Signal-Android
Update handling of invalid unknown fields.
rodzic
b1fcea673a
commit
28d86886bd
|
@ -1,6 +1,7 @@
|
|||
package org.whispersystems.signalservice.api.storage;
|
||||
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
import org.whispersystems.libsignal.logging.Log;
|
||||
import org.whispersystems.libsignal.util.guava.Optional;
|
||||
|
@ -19,6 +20,8 @@ import java.util.Objects;
|
|||
|
||||
public final class SignalAccountRecord implements SignalRecord {
|
||||
|
||||
private static final String TAG = SignalAccountRecord.class.getSimpleName();
|
||||
|
||||
private final StorageId id;
|
||||
private final AccountRecord proto;
|
||||
private final boolean hasUnknownFields;
|
||||
|
@ -489,7 +492,12 @@ public final class SignalAccountRecord implements SignalRecord {
|
|||
AccountRecord proto = builder.build();
|
||||
|
||||
if (unknownFields != null) {
|
||||
try {
|
||||
proto = ProtoUtil.combineWithUnknownFields(proto, unknownFields);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
Log.w(TAG, "Failed to combine unknown fields!", e);
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
|
||||
return new SignalAccountRecord(id, proto);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package org.whispersystems.signalservice.api.storage;
|
||||
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
import org.whispersystems.libsignal.logging.Log;
|
||||
import org.whispersystems.libsignal.util.guava.Optional;
|
||||
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
||||
import org.whispersystems.signalservice.api.util.OptionalUtil;
|
||||
|
@ -17,6 +19,8 @@ import java.util.Objects;
|
|||
|
||||
public final class SignalContactRecord implements SignalRecord {
|
||||
|
||||
private static final String TAG = SignalContactRecord.class.getSimpleName();
|
||||
|
||||
private final StorageId id;
|
||||
private final ContactRecord proto;
|
||||
private final boolean hasUnknownFields;
|
||||
|
@ -275,7 +279,11 @@ public final class SignalContactRecord implements SignalRecord {
|
|||
ContactRecord proto = builder.build();
|
||||
|
||||
if (unknownFields != null) {
|
||||
try {
|
||||
proto = ProtoUtil.combineWithUnknownFields(proto, unknownFields);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
Log.w(TAG, "Failed to combine unknown fields!", e);
|
||||
}
|
||||
}
|
||||
|
||||
return new SignalContactRecord(id, proto);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package org.whispersystems.signalservice.api.storage;
|
||||
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
import org.whispersystems.libsignal.logging.Log;
|
||||
import org.whispersystems.signalservice.api.util.ProtoUtil;
|
||||
import org.whispersystems.signalservice.internal.storage.protos.GroupV1Record;
|
||||
|
||||
|
@ -12,6 +14,8 @@ import java.util.Objects;
|
|||
|
||||
public final class SignalGroupV1Record implements SignalRecord {
|
||||
|
||||
private static final String TAG = SignalGroupV1Record.class.getSimpleName();
|
||||
|
||||
private final StorageId id;
|
||||
private final GroupV1Record proto;
|
||||
private final byte[] groupId;
|
||||
|
@ -175,7 +179,11 @@ public final class SignalGroupV1Record implements SignalRecord {
|
|||
GroupV1Record proto = builder.build();
|
||||
|
||||
if (unknownFields != null) {
|
||||
try {
|
||||
proto = ProtoUtil.combineWithUnknownFields(proto, unknownFields);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
Log.w(TAG, "Failed to combine unknown fields!", e);
|
||||
}
|
||||
}
|
||||
|
||||
return new SignalGroupV1Record(id, proto);
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package org.whispersystems.signalservice.api.storage;
|
||||
|
||||
import com.google.protobuf.ByteString;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
import org.signal.zkgroup.InvalidInputException;
|
||||
import org.signal.zkgroup.groups.GroupMasterKey;
|
||||
import org.whispersystems.libsignal.logging.Log;
|
||||
import org.whispersystems.signalservice.api.util.ProtoUtil;
|
||||
import org.whispersystems.signalservice.internal.storage.protos.GroupV2Record;
|
||||
|
||||
|
@ -14,6 +16,8 @@ import java.util.Objects;
|
|||
|
||||
public final class SignalGroupV2Record implements SignalRecord {
|
||||
|
||||
private static final String TAG = SignalGroupV2Record.class.getSimpleName();
|
||||
|
||||
private final StorageId id;
|
||||
private final GroupV2Record proto;
|
||||
private final byte[] masterKey;
|
||||
|
@ -190,7 +194,11 @@ public final class SignalGroupV2Record implements SignalRecord {
|
|||
GroupV2Record proto = builder.build();
|
||||
|
||||
if (unknownFields != null) {
|
||||
try {
|
||||
proto = ProtoUtil.combineWithUnknownFields(proto, unknownFields);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
Log.w(TAG, "Failed to combine unknown fields!", e);
|
||||
}
|
||||
}
|
||||
|
||||
return new SignalGroupV2Record(id, proto);
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.google.protobuf.UnknownFieldSetLite;
|
|||
|
||||
import org.whispersystems.libsignal.logging.Log;
|
||||
import org.whispersystems.libsignal.util.ByteUtil;
|
||||
import org.whispersystems.signalservice.api.InvalidMessageStructureException;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -60,12 +61,13 @@ public final class ProtoUtil {
|
|||
* acknowledged.
|
||||
*/
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
public static <Proto extends GeneratedMessageLite> Proto combineWithUnknownFields(Proto proto, byte[] serializedWithUnknownFields) {
|
||||
public static <Proto extends GeneratedMessageLite> Proto combineWithUnknownFields(Proto proto, byte[] serializedWithUnknownFields)
|
||||
throws InvalidProtocolBufferException
|
||||
{
|
||||
if (serializedWithUnknownFields == null) {
|
||||
return proto;
|
||||
}
|
||||
|
||||
try {
|
||||
Proto protoWithUnknownFields = (Proto) proto.getParserForType().parseFrom(serializedWithUnknownFields);
|
||||
byte[] unknownFields = getUnknownFields(protoWithUnknownFields);
|
||||
|
||||
|
@ -76,9 +78,6 @@ public final class ProtoUtil {
|
|||
byte[] combined = ByteUtil.combine(proto.toByteArray(), unknownFields);
|
||||
|
||||
return (Proto) proto.getParserForType().parseFrom(combined);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
|
|
Ładowanie…
Reference in New Issue