修复Json中不带引号的n开头且长度大于3的字符串转成String时不能正常解析的BUG

This commit is contained in:
Redkale
2017-11-10 19:56:21 +08:00
parent 40c19c1521
commit 123b94398a

View File

@@ -162,6 +162,7 @@ public class JsonReader extends Reader {
* 判断下一个非空白字符是否为{ * 判断下一个非空白字符是否为{
* *
* @param clazz 类名 * @param clazz 类名
*
* @return 返回 null 表示对象为null 返回空字符串表示当前class与返回的class一致返回非空字符串表示class是当前class的子类。 * @return 返回 null 表示对象为null 返回空字符串表示当前class与返回的class一致返回非空字符串表示class是当前class的子类。
*/ */
@Override @Override
@@ -404,7 +405,7 @@ public class JsonReader extends Reader {
@Override @Override
public final DeMember readFieldName(final DeMember[] members) { public final DeMember readFieldName(final DeMember[] members) {
final String exceptedfield = this.readSmallString(); final String exceptedfield = this.readSmallString();
if(exceptedfield == null) return null; if (exceptedfield == null) return null;
final int len = members.length; final int len = members.length;
if (this.fieldIndex >= len) this.fieldIndex = 0; if (this.fieldIndex >= len) this.fieldIndex = 0;
for (int k = this.fieldIndex; k < len; k++) { for (int k = this.fieldIndex; k < len; k++) {
@@ -475,7 +476,7 @@ public class JsonReader extends Reader {
} }
} }
if (expected != '"' && expected != '\'') { if (expected != '"' && expected != '\'') {
if (expected == 'n' && text0.length > currpos + 3) { if (expected == 'n' && text0.length > currpos + 3 && (text0[1 + currpos] == 'u' && text0[2 + currpos] == 'l' && text0[3 + currpos] == 'l')) {
if (text0[++currpos] == 'u' && text0[++currpos] == 'l' && text0[++currpos] == 'l') { if (text0[++currpos] == 'u' && text0[++currpos] == 'l' && text0[++currpos] == 'l') {
this.position = currpos; this.position = currpos;
if (text0.length > currpos + 4) { if (text0.length > currpos + 4) {
@@ -488,7 +489,7 @@ public class JsonReader extends Reader {
} else { } else {
final int start = currpos; final int start = currpos;
for (;;) { for (;;) {
if(currpos >= text0.length) break; if (currpos >= text0.length) break;
char ch = text0[currpos]; char ch = text0[currpos];
if (ch == ',' || ch <= ' ' || ch == '}' || ch == ']' || ch == ':') break; if (ch == ',' || ch <= ' ' || ch == '}' || ch == ']' || ch == ':') break;
currpos++; currpos++;