Closed KouichiAraki closed 6 years ago
再現用 #76.json
:
[ { "jsonrpc": "2.0", "id": null, "method": "GeoObject.New" }
, { "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexGlobal"
, "params":
{ "id": 0
, "vertices": [ 200.0, 43.062096, 141.354376, 200.0, 43.067096, 141.349376 , 200.0, 43.067096, 141.359376 ]
}
}
, { "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetIndex"
, "params":
{ "id": 0
, "indices": [ 0, 1, 2, 0, 2, 1 ]
}
}
, { "jsonrpc": "2.0", "id": null, "method": "GeoObject.GetIndex"
, "params": [ 0 ]
}
]
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST -d @#76.json
状況の発生を確認。再現性、高。
メモリーアクセスエラーが発生する事からアプリケーションのバグと認定。対応を開始。
JSONのパーサーに実装上のバグを発見。対応を検討。
バグの影響範囲を確認:
修正後、動作確認。
<< curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST -d @#76.json [draft-c++1z]
HTTP/1.1 200 OK
Content-Length: 306
Content-Type: application/json
Access-Control-Allow-Origin: *
[
{
"jsonrpc": "2.0",
"id": null,
"result": 0
},
{
"jsonrpc": "2.0",
"id": null,
"result": null
},
{
"jsonrpc": "2.0",
"id": null,
"result": null
},
{
"jsonrpc": "2.0",
"id": null,
"error":
{
"code": -32602,
"message": "not found id"
}
}
]%
動作確認で GetIndex が error を返しているが、この点はバグとは無関係。 params の定義が誤っているためこの場合は error となるのが正常な挙動。
https://github.com/godai-kaihatsu/gondwana/wiki/dev'http_api'reference'GeoObject.GetIndex
これについては Pattern 3 を試そうとしたものと思われるので、#76.json
のバッチリストの最後のリクエストオブジェクトを次のように修正すると期待動作を得られると推量される:
fixed-request:
, { "jsonrpc": "2.0", "id": null, "method": "GeoObject.GetIndex"
, "params": { "id": 0, "indices": [ 0 ] }
}
exptected-response:
{
"jsonrpc": "2.0",
"id": null,
"result":
{
"0": 0
}
}
また、 params の Pattern 3 は複数の index を取得したい場合のパラメーターの与え方なので、この場合のように 1 つだけの index を取得したい場合は Pattern 4 を用いるとより簡単にリクエストもできる。
request-pettern-4:
"params": { "id": 0, "index": 0 }
response-pattern-4:
{
"jsonrpc": "2.0",
"id": null,
"result": 0
}
このバグ修正は 4.0.0.19 ( preview-6b ) に結合。 @KouichiAraki バグレポートありがとうございました。
G4-4.0.0.16にて下記のコードを実行するとエラーウィンドウが表示されてG4が落ちてしまいました。 GetIndexを実行することが原因なのではないかと思われます。 ご確認よろしくお願いいたします。