Fix contact sync message parsing

pull/63/head
Niels Andriesse 6 years ago
parent dfccd6b9a3
commit b55c751358

@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
// Returns NO on error. // Returns NO on error.
- (BOOL)writeData:(NSData *)data; - (BOOL)writeData:(NSData *)data;
- (BOOL)writeUInt32:(UInt32)value;
- (BOOL)writeVariableLengthUInt32:(UInt32)value; - (BOOL)writeVariableLengthUInt32:(UInt32)value;
@end @end

@ -63,6 +63,11 @@ NS_ASSUME_NONNULL_BEGIN
return YES; return YES;
} }
- (BOOL)writeUInt32:(UInt32)value {
NSData *data = [[NSData alloc] initWithBytes:&value length:sizeof(value)];
return [self writeData:data];
}
- (BOOL)writeVariableLengthUInt32:(UInt32)value - (BOOL)writeVariableLengthUInt32:(UInt32)value
{ {
while (YES) { while (YES) {

@ -94,7 +94,7 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
} }
uint32_t contactDataLength = (uint32_t)contactData.length; uint32_t contactDataLength = (uint32_t)contactData.length;
[self writeVariableLengthUInt32:contactDataLength]; [self writeUInt32:contactDataLength];
[self writeData:contactData]; [self writeData:contactData];
/* /*

@ -10,11 +10,13 @@
var index = 0 var index = 0
var result: [String] = [] var result: [String] = []
while index < data.endIndex { while index < data.endIndex {
let uncheckedSize: Int? = try? data[index..<(index+1)].withUnsafeBytes { $0.pointee } let uncheckedSize: UInt32? = try? data[index..<(index+4)].withUnsafeBytes { $0.pointee }
guard let size = uncheckedSize else { break } guard let size = uncheckedSize else { break }
index += 1 let sizeAsInt = Int(size)
let protoAsData = data[index..<(index+size)] index += 4
let protoAsData = data[index..<(index+sizeAsInt)]
guard let proto = try? SSKProtoContactDetails.parseData(protoAsData) else { break } guard let proto = try? SSKProtoContactDetails.parseData(protoAsData) else { break }
index += sizeAsInt
result.append(proto.number) result.append(proto.number)
} }
return result return result

Loading…
Cancel
Save