Skip to content

Commit 06d4968

Browse files
cschuchardt88shargonajara87
authored
fix(Oracle): keep per-request filter errors from poisoning later ids (#1104)
ProcessRequestAsync mutated the shared URL response code when JSONPath Filter threw. Later requests for the same URL then inherited Error even if their filters would succeed. Co-authored-by: Shargon <shargon@gmail.com> Co-authored-by: Alvaro <amjarag@gmail.com>
1 parent 06817a1 commit 06d4968

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

plugins/OracleService/OracleService.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -333,19 +333,20 @@ private async Task ProcessRequestAsync(DataCache snapshot, OracleRequest req, Ca
333333
foreach (var (requestId, request) in NativeContract.Oracle.GetRequestsByUrl(snapshot, req.Url))
334334
{
335335
var result = Array.Empty<byte>();
336-
if (code == OracleResponseCode.Success)
336+
var responseCode = code;
337+
if (responseCode == OracleResponseCode.Success)
337338
{
338339
try
339340
{
340341
result = Filter(data, request.Filter);
341342
}
342343
catch (Exception ex)
343344
{
344-
code = OracleResponseCode.Error;
345+
responseCode = OracleResponseCode.Error;
345346
PluginLogger?.Warning("Filter '{Filter}' error: {ErrorMessage}", request.Filter, ex.Message);
346347
}
347348
}
348-
var response = new OracleResponse() { Id = requestId, Code = code, Result = result };
349+
var response = new OracleResponse() { Id = requestId, Code = responseCode, Result = result };
349350
var responseTx = CreateResponseTx(snapshot, request, response, oracleNodes, _system.Settings);
350351
var backupTx = CreateResponseTx(snapshot, request, new OracleResponse()
351352
{
@@ -355,7 +356,7 @@ private async Task ProcessRequestAsync(DataCache snapshot, OracleRequest req, Ca
355356
}, oracleNodes, _system.Settings, true);
356357

357358
PluginLogger?.Information("Built response tx: {OriginalTxid}-({RequestId}) {ResponseTxHash}, responseCode:{ResponseCode}, result:{Result}, validUntilBlock:{ValidUntilBlock}, backupTx:{BackupTxHash}-{BackupValidUntilBlock}",
358-
req.OriginalTxid, requestId, responseTx.Hash, code, result.ToHexString(), responseTx.ValidUntilBlock, backupTx.Hash, backupTx.ValidUntilBlock);
359+
req.OriginalTxid, requestId, responseTx.Hash, responseCode, result.ToHexString(), responseTx.ValidUntilBlock, backupTx.Hash, backupTx.ValidUntilBlock);
359360

360361
var tasks = new List<Task>();
361362
ECPoint[] oraclePublicKeys = NativeContract.RoleManagement.GetDesignatedByRole(snapshot, Role.Oracle, height);

0 commit comments

Comments
 (0)