fix caps hash calculation for empty form fields

This commit is contained in:
Daniel Gultsch 2023-10-31 11:03:59 +01:00
parent fba7721cd5
commit f6482c5a87
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2

View file

@ -17,6 +17,7 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xml.Element;
@ -100,9 +101,9 @@ public class ServiceDiscoveryResult {
public ServiceDiscoveryResult(Cursor cursor) throws JSONException { public ServiceDiscoveryResult(Cursor cursor) throws JSONException {
this( this(
cursor.getString(cursor.getColumnIndex(HASH)), cursor.getString(cursor.getColumnIndexOrThrow(HASH)),
Base64.decode(cursor.getString(cursor.getColumnIndex(VER)), Base64.DEFAULT), Base64.decode(cursor.getString(cursor.getColumnIndexOrThrow(VER)), Base64.DEFAULT),
new JSONObject(cursor.getString(cursor.getColumnIndex(RESULT))) new JSONObject(cursor.getString(cursor.getColumnIndexOrThrow(RESULT)))
); );
} }
@ -216,17 +217,18 @@ public class ServiceDiscoveryResult {
s.append(clean(feature)).append("<"); s.append(clean(feature)).append("<");
} }
Collections.sort(forms, (lhs, rhs) -> lhs.getFormType().compareTo(rhs.getFormType())); Collections.sort(forms, Comparator.comparing(Data::getFormType));
for (Data form : forms) { for (Data form : forms) {
s.append(clean(form.getFormType())).append("<"); s.append(clean(form.getFormType())).append("<");
List<Field> fields = form.getFields(); List<Field> fields = form.getFields();
Collections.sort(fields, (lhs, rhs) -> Strings.nullToEmpty(lhs.getFieldName()).compareTo(Strings.nullToEmpty(rhs.getFieldName()))); Collections.sort(
fields, Comparator.comparing(lhs -> Strings.nullToEmpty(lhs.getFieldName())));
for (Field field : fields) { for (Field field : fields) {
s.append(Strings.nullToEmpty(field.getFieldName())).append("<"); s.append(Strings.nullToEmpty(field.getFieldName())).append("<");
List<String> values = field.getValues(); final List<String> values = field.getValues();
Collections.sort(values); Collections.sort(values, Comparator.comparing(ServiceDiscoveryResult::blankNull));
for (String value : values) { for (final String value : values) {
s.append(blankNull(value)).append("<"); s.append(blankNull(value)).append("<");
} }
} }