Skip to content

Commit

Permalink
bug fix for WriteLongAsString, for issue #961
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Nov 24, 2022
1 parent ef78b81 commit 4bbdbef
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import java.lang.reflect.Method;
import java.util.Arrays;

import static com.alibaba.fastjson2.JSONWriter.Feature.WriteLongAsString;
import static com.alibaba.fastjson2.JSONWriter.Feature.WriteNonStringValueAsString;

abstract class FieldWriterInt64<T>
extends FieldWriter<T> {
volatile byte[][] utf8ValueCache;
Expand All @@ -28,9 +31,10 @@ abstract class FieldWriterInt64<T>
}

public void writeInt64(JSONWriter jsonWriter, long value) {
boolean writeNonStringValueAsString = (jsonWriter.getFeatures() & JSONWriter.Feature.WriteNonStringValueAsString.mask) != 0;
long features = jsonWriter.getFeatures() | this.features;
boolean noneString = (features & (WriteNonStringValueAsString.mask | WriteLongAsString.mask)) != 0;

if (jsonWriter.isUTF8() && !writeNonStringValueAsString) {
if (jsonWriter.isUTF8() && !noneString) {
if (value >= -1 && value < 1039) {
byte[] bytes = null;
if (utf8ValueCache == null) {
Expand All @@ -49,7 +53,7 @@ public void writeInt64(JSONWriter jsonWriter, long value) {
jsonWriter.writeNameRaw(bytes);
return;
}
} else if (jsonWriter.isUTF16() && !writeNonStringValueAsString) {
} else if (jsonWriter.isUTF16() && !noneString) {
if (value >= -1 && value < 1039) {
char[] chars = null;
if (utf16ValueCache == null) {
Expand Down
32 changes: 32 additions & 0 deletions core/src/test/java/com/alibaba/fastjson2/issues/Issue961.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.alibaba.fastjson2.issues;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class Issue961 {
@Test
public void test() {
User user1 = new User(1038L);
String res1 = JSON.toJSONString(user1, JSONWriter.Feature.WriteLongAsString);
assertEquals("{\"id\":\"1038\"}", res1);

User user2 = new User(1039L);
String res2 = JSON.toJSONString(user2, JSONWriter.Feature.WriteLongAsString);
assertEquals("{\"id\":\"1039\"}", res2);
}

public class User {
private long id;

public User(long id) {
this.id = id;
}

public long getId() {
return id;
}
}
}

0 comments on commit 4bbdbef

Please # to comment.