fix endless parsing
This commit is contained in:
@@ -164,18 +164,29 @@ abstract class ResponseParser<T> {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
val token = parser.nextToken()
|
val token = parser.nextToken()
|
||||||
if (token == JsonToken.START_OBJECT) {
|
when (token) {
|
||||||
inited = true
|
null -> {
|
||||||
count++
|
return null
|
||||||
continue
|
}
|
||||||
}
|
JsonToken.START_OBJECT -> {
|
||||||
if (token == JsonToken.END_OBJECT) {
|
inited = true
|
||||||
count--
|
count++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if (token == JsonToken.VALUE_NULL) {
|
JsonToken.END_OBJECT -> {
|
||||||
// error is just null
|
count--
|
||||||
return null
|
continue
|
||||||
|
}
|
||||||
|
JsonToken.VALUE_NULL -> {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
JsonToken.VALUE_STRING -> {
|
||||||
|
if (!inited) {
|
||||||
|
message = parser.valueAsString
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
}
|
}
|
||||||
val field = parser.currentName()
|
val field = parser.currentName()
|
||||||
if (field == "code" && token == JsonToken.VALUE_NUMBER_INT) {
|
if (field == "code" && token == JsonToken.VALUE_NUMBER_INT) {
|
||||||
|
|||||||
@@ -223,4 +223,16 @@ class ResponseRpcParserSpec extends Specification {
|
|||||||
!act.hasResult()
|
!act.hasResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def "Parse non object error"() {
|
||||||
|
setup:
|
||||||
|
def json = '{"jsonrpc": "2.0", "id": 1, "error": "plain error"}'
|
||||||
|
when:
|
||||||
|
def act = parser.parse(json.getBytes())
|
||||||
|
then:
|
||||||
|
act.error != null
|
||||||
|
act.error.message == "plain error"
|
||||||
|
act.hasError()
|
||||||
|
!act.hasResult()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user