Skip to content

Commit

Permalink
Fixed bug in map key sorting for Java TextFormat.
Browse files Browse the repository at this point in the history
  • Loading branch information
haberman committed May 14, 2020
1 parent 4bbdffa commit 5608c3d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 19 deletions.
22 changes: 3 additions & 19 deletions java/core/src/main/java/com/google/protobuf/TextFormat.java
Expand Up @@ -490,27 +490,11 @@ public int compareTo(MapEntryAdapter b) {
}
switch (fieldType) {
case BOOLEAN:
boolean aBoolean = (boolean) getKey();
boolean bBoolean = (boolean) b.getKey();
if (aBoolean == bBoolean) {
return 0;
} else if (aBoolean) {
return 1;
} else {
return -1;
}
return Boolean.compare((boolean) getKey(), (boolean) b.getKey());
case LONG:
long aLong = (long) getKey();
long bLong = (long) b.getKey();
if (aLong < bLong) {
return -1;
} else if (aLong > bLong) {
return 1;
} else {
return 0;
}
return Long.compare((long) getKey(), (long) b.getKey());
case INT:
return (int) getKey() - (int) b.getKey();
return Integer.compare((int) getKey(), (int) b.getKey());
case STRING:
String aString = (String) getKey();
String bString = (String) b.getKey();
Expand Down
21 changes: 21 additions & 0 deletions java/core/src/test/java/com/google/protobuf/TextFormatTest.java
Expand Up @@ -1404,6 +1404,27 @@ public void testMapTextFormat() throws Exception {
}
}

public void testMapDuplicateKeys() throws Exception {
String input =
"int32_to_int32_field: {\n"
+ " key: 1\n"
+ " value: 1\n"
+ "}\n"
+ "int32_to_int32_field: {\n"
+ " key: -2147483647\n"
+ " value: 5\n"
+ "}\n"
+ "int32_to_int32_field: {\n"
+ " key: 1\n"
+ " value: -1\n"
+ "}\n";
TestMap msg = TextFormat.parse(input, TestMap.class);
int val1 = msg.getInt32ToInt32Field().get(1);
TestMap msg2 = TextFormat.parse(msg.toString(), TestMap.class);
int val2 = msg2.getInt32ToInt32Field().get(1);
assertEquals(val1, val2);
}

public void testMapShortForm() throws Exception {
String text =
"string_to_int32_field [{ key: 'x' value: 10 }, { key: 'y' value: 20 }]\n"
Expand Down

0 comments on commit 5608c3d

Please sign in to comment.