node-opcua-service-filter 2.172.0 → 2.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/check_event_clause.js +5 -6
- package/dist/check_event_clause.js.map +1 -1
- package/dist/check_where_clause.d.ts +18 -0
- package/dist/check_where_clause.js +111 -0
- package/dist/check_where_clause.js.map +1 -1
- package/package.json +15 -15
- package/source/check_event_clause.ts +6 -8
- package/source/check_where_clause.ts +123 -0
|
@@ -24,14 +24,13 @@ function checkSelectClause(parentNode, selectClause) {
|
|
|
24
24
|
return node_opcua_status_code_1.StatusCodes.Good;
|
|
25
25
|
}
|
|
26
26
|
const eventTypeNode = addressSpace.findEventType(selectClause.typeDefinitionId);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
debugLog(" checkSelectClause", eventTypeNode.toString());
|
|
31
|
-
}
|
|
27
|
+
// the typeDefinitionId must reference an existing node ...
|
|
28
|
+
if (!eventTypeNode) {
|
|
29
|
+
return node_opcua_status_code_1.StatusCodes.BadNodeIdUnknown;
|
|
32
30
|
}
|
|
33
|
-
//
|
|
31
|
+
// ... and that node must be an ObjectType (an EventType)
|
|
34
32
|
if (eventTypeNode.nodeClass !== node_opcua_data_model_1.NodeClass.ObjectType) {
|
|
33
|
+
debugLog(" checkSelectClause", eventTypeNode.toString());
|
|
35
34
|
return node_opcua_status_code_1.StatusCodes.BadTypeMismatch;
|
|
36
35
|
}
|
|
37
36
|
// navigate to the innerNode specified by the browsePath [ QualifiedName]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_event_clause.js","sourceRoot":"","sources":["../source/check_event_clause.ts"],"names":[],"mappings":";;AAkBA,
|
|
1
|
+
{"version":3,"file":"check_event_clause.js","sourceRoot":"","sources":["../source/check_event_clause.ts"],"names":[],"mappings":";;AAkBA,8CAwBC;AAQD,gDAEC;AApDD;;GAEG;AACH,iEAAkD;AAElD,uGAAgG;AAChG,mEAAiE;AAEjE,uDAAiD;AAEjD,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,UAAU,CAAC,CAAC;AAE3C;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,UAAoB,EAAE,YAAoC;IACxF,EAAE;IACF,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAE7C,iBAAiB;IACjB,IAAI,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,OAAO,oCAAW,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAEhF,2DAA2D;IAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,oCAAW,CAAC,gBAAgB,CAAC;IACxC,CAAC;IACD,yDAAyD;IACzD,IAAI,aAAa,CAAC,SAAS,KAAK,iCAAS,CAAC,UAAU,EAAE,CAAC;QACnD,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,oCAAW,CAAC,eAAe,CAAC;IACvC,CAAC;IAED,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAA,+EAAoC,EAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAChG,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC,UAAU,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,aAA2B,EAAE,aAAuC;IACnG,OAAO,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1,3 +1,21 @@
|
|
|
1
1
|
import { ContentFilter } from "node-opcua-types";
|
|
2
|
+
import { type StatusCode } from "node-opcua-status-code";
|
|
2
3
|
import { FilterContext } from "./filter_context";
|
|
4
|
+
/**
|
|
5
|
+
* Validate the structure of a ContentFilter, returning a precise StatusCode (Good when valid).
|
|
6
|
+
*
|
|
7
|
+
* The following OPC UA Part 4 - 7.7 rules are enforced over the elements that are reachable from the
|
|
8
|
+
* starting element (index 0); elements that cannot be traced back to the starting element are
|
|
9
|
+
* ignored (7.7.1):
|
|
10
|
+
* - each operator carries the number of operands defined by Table 118 / Table 119, otherwise
|
|
11
|
+
* `BadFilterOperandCountMismatch` ("Extra operands for any operator shall result in an error");
|
|
12
|
+
* - each ElementOperand references an existing element (in-bounds), otherwise
|
|
13
|
+
* `BadFilterElementInvalid`;
|
|
14
|
+
* - the reference graph is acyclic, otherwise `BadFilterElementInvalid` ("The evaluation shall not
|
|
15
|
+
* introduce loops").
|
|
16
|
+
*
|
|
17
|
+
* The traversal is iterative so that validating a deeply-nested filter cannot itself exhaust the
|
|
18
|
+
* stack.
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateContentFilter(filter: ContentFilter): StatusCode;
|
|
3
21
|
export declare function checkFilter(filterContext: FilterContext, contentFilter: ContentFilter): boolean;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateContentFilter = validateContentFilter;
|
|
3
4
|
exports.checkFilter = checkFilter;
|
|
4
5
|
const node_opcua_types_1 = require("node-opcua-types");
|
|
5
6
|
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
6
7
|
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
7
8
|
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
9
|
+
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
8
10
|
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
9
11
|
const resolve_operand_1 = require("./resolve_operand");
|
|
10
12
|
const warningLog = (0, node_opcua_debug_1.make_warningLog)("Filter");
|
|
@@ -303,7 +305,116 @@ function checkFilterAtIndex(filterContext, filter, index) {
|
|
|
303
305
|
return false;
|
|
304
306
|
}
|
|
305
307
|
}
|
|
308
|
+
// Number of operands each FilterOperator expects, as per OPC UA Part 4 - Table 118 / Table 119.
|
|
309
|
+
// `max = Infinity` is used for the variadic InList operator (2..n). Operators not listed here are
|
|
310
|
+
// not subject to an operand-count check.
|
|
311
|
+
const operandCountByOperator = {
|
|
312
|
+
[node_opcua_types_1.FilterOperator.Equals]: { min: 2, max: 2 },
|
|
313
|
+
[node_opcua_types_1.FilterOperator.IsNull]: { min: 1, max: 1 },
|
|
314
|
+
[node_opcua_types_1.FilterOperator.GreaterThan]: { min: 2, max: 2 },
|
|
315
|
+
[node_opcua_types_1.FilterOperator.LessThan]: { min: 2, max: 2 },
|
|
316
|
+
[node_opcua_types_1.FilterOperator.GreaterThanOrEqual]: { min: 2, max: 2 },
|
|
317
|
+
[node_opcua_types_1.FilterOperator.LessThanOrEqual]: { min: 2, max: 2 },
|
|
318
|
+
[node_opcua_types_1.FilterOperator.Like]: { min: 2, max: 2 },
|
|
319
|
+
[node_opcua_types_1.FilterOperator.Not]: { min: 1, max: 1 },
|
|
320
|
+
[node_opcua_types_1.FilterOperator.Between]: { min: 3, max: 3 },
|
|
321
|
+
[node_opcua_types_1.FilterOperator.InList]: { min: 2, max: Number.POSITIVE_INFINITY },
|
|
322
|
+
[node_opcua_types_1.FilterOperator.And]: { min: 2, max: 2 },
|
|
323
|
+
[node_opcua_types_1.FilterOperator.Or]: { min: 2, max: 2 },
|
|
324
|
+
[node_opcua_types_1.FilterOperator.Cast]: { min: 2, max: 2 },
|
|
325
|
+
[node_opcua_types_1.FilterOperator.BitwiseAnd]: { min: 2, max: 2 },
|
|
326
|
+
[node_opcua_types_1.FilterOperator.BitwiseOr]: { min: 2, max: 2 },
|
|
327
|
+
[node_opcua_types_1.FilterOperator.InView]: { min: 1, max: 1 },
|
|
328
|
+
[node_opcua_types_1.FilterOperator.OfType]: { min: 1, max: 1 },
|
|
329
|
+
[node_opcua_types_1.FilterOperator.RelatedTo]: { min: 6, max: 6 }
|
|
330
|
+
};
|
|
331
|
+
/**
|
|
332
|
+
* Validate the structure of a ContentFilter, returning a precise StatusCode (Good when valid).
|
|
333
|
+
*
|
|
334
|
+
* The following OPC UA Part 4 - 7.7 rules are enforced over the elements that are reachable from the
|
|
335
|
+
* starting element (index 0); elements that cannot be traced back to the starting element are
|
|
336
|
+
* ignored (7.7.1):
|
|
337
|
+
* - each operator carries the number of operands defined by Table 118 / Table 119, otherwise
|
|
338
|
+
* `BadFilterOperandCountMismatch` ("Extra operands for any operator shall result in an error");
|
|
339
|
+
* - each ElementOperand references an existing element (in-bounds), otherwise
|
|
340
|
+
* `BadFilterElementInvalid`;
|
|
341
|
+
* - the reference graph is acyclic, otherwise `BadFilterElementInvalid` ("The evaluation shall not
|
|
342
|
+
* introduce loops").
|
|
343
|
+
*
|
|
344
|
+
* The traversal is iterative so that validating a deeply-nested filter cannot itself exhaust the
|
|
345
|
+
* stack.
|
|
346
|
+
*/
|
|
347
|
+
function validateContentFilter(filter) {
|
|
348
|
+
const elements = filter.elements || [];
|
|
349
|
+
const n = elements.length;
|
|
350
|
+
if (n === 0) {
|
|
351
|
+
return node_opcua_status_code_1.StatusCodes.Good;
|
|
352
|
+
}
|
|
353
|
+
// inspect a single element: validate its operand count and collect the in-bounds indices it
|
|
354
|
+
// references through ElementOperands. `status` is non-Good when the element is malformed.
|
|
355
|
+
const inspect = (elementIndex) => {
|
|
356
|
+
const element = elements[elementIndex];
|
|
357
|
+
// an element of the array may be null/undefined (e.g. a null ExtensionObject); see checkFilterAtIndex
|
|
358
|
+
if (!element) {
|
|
359
|
+
return { targets: [], status: node_opcua_status_code_1.StatusCodes.Good };
|
|
360
|
+
}
|
|
361
|
+
const operands = element.filterOperands || [];
|
|
362
|
+
const expected = operandCountByOperator[element.filterOperator];
|
|
363
|
+
if (expected && (operands.length < expected.min || operands.length > expected.max)) {
|
|
364
|
+
warningLog(`checkFilter: operator ${node_opcua_types_1.FilterOperator[element.filterOperator]} of element #${elementIndex} ` +
|
|
365
|
+
`has ${operands.length} operand(s), expected ${expected.min}${expected.max === expected.min ? "" : `..${expected.max === Number.POSITIVE_INFINITY ? "n" : expected.max}`}`);
|
|
366
|
+
return { targets: [], status: node_opcua_status_code_1.StatusCodes.BadFilterOperandCountMismatch };
|
|
367
|
+
}
|
|
368
|
+
const targets = [];
|
|
369
|
+
for (const operand of operands) {
|
|
370
|
+
if (operand instanceof node_opcua_types_1.ElementOperand) {
|
|
371
|
+
const index = operand.index;
|
|
372
|
+
if (index < 0 || index >= n) {
|
|
373
|
+
warningLog(`checkFilter: ElementOperand of element #${elementIndex} references out-of-bounds element #${index} ` +
|
|
374
|
+
`(elements.length = ${n})`);
|
|
375
|
+
return { targets: [], status: node_opcua_status_code_1.StatusCodes.BadFilterElementInvalid };
|
|
376
|
+
}
|
|
377
|
+
targets.push(index);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return { targets, status: node_opcua_status_code_1.StatusCodes.Good };
|
|
381
|
+
};
|
|
382
|
+
// 0 = unvisited, 1 = on the current DFS path, 2 = fully explored
|
|
383
|
+
const color = new Array(n).fill(0);
|
|
384
|
+
const root = inspect(0);
|
|
385
|
+
if (root.status.isNot(node_opcua_status_code_1.StatusCodes.Good)) {
|
|
386
|
+
return root.status;
|
|
387
|
+
}
|
|
388
|
+
color[0] = 1;
|
|
389
|
+
const stack = [{ node: 0, targets: root.targets, pos: 0 }];
|
|
390
|
+
while (stack.length > 0) {
|
|
391
|
+
const frame = stack[stack.length - 1];
|
|
392
|
+
if (frame.pos >= frame.targets.length) {
|
|
393
|
+
color[frame.node] = 2;
|
|
394
|
+
stack.pop();
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
const next = frame.targets[frame.pos++];
|
|
398
|
+
if (color[next] === 1) {
|
|
399
|
+
// a back edge to an element still on the current path -> cycle
|
|
400
|
+
warningLog(`checkFilter: cyclic ElementOperand reference detected involving element #${next}`);
|
|
401
|
+
return node_opcua_status_code_1.StatusCodes.BadFilterElementInvalid;
|
|
402
|
+
}
|
|
403
|
+
if (color[next] === 0) {
|
|
404
|
+
const r = inspect(next);
|
|
405
|
+
if (r.status.isNot(node_opcua_status_code_1.StatusCodes.Good)) {
|
|
406
|
+
return r.status;
|
|
407
|
+
}
|
|
408
|
+
color[next] = 1;
|
|
409
|
+
stack.push({ node: next, targets: r.targets, pos: 0 });
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return node_opcua_status_code_1.StatusCodes.Good;
|
|
413
|
+
}
|
|
306
414
|
function checkFilter(filterContext, contentFilter) {
|
|
415
|
+
if (validateContentFilter(contentFilter).isNot(node_opcua_status_code_1.StatusCodes.Good)) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
307
418
|
return checkFilterAtIndex(filterContext, contentFilter, 0);
|
|
308
419
|
}
|
|
309
420
|
//# sourceMappingURL=check_where_clause.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_where_clause.js","sourceRoot":"","sources":["../source/check_where_clause.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check_where_clause.js","sourceRoot":"","sources":["../source/check_where_clause.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-opcua-service-filter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.174.0",
|
|
4
4
|
"description": "pure nodejs OPCUA SDK - module service-filter",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,23 +11,23 @@
|
|
|
11
11
|
"build": "tsc -b"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"node-opcua-address-space-base": "2.
|
|
14
|
+
"node-opcua-address-space-base": "2.174.0",
|
|
15
15
|
"node-opcua-assert": "2.164.0",
|
|
16
|
-
"node-opcua-basic-types": "2.
|
|
17
|
-
"node-opcua-constants": "2.
|
|
18
|
-
"node-opcua-data-model": "2.
|
|
19
|
-
"node-opcua-data-value": "2.
|
|
16
|
+
"node-opcua-basic-types": "2.174.0",
|
|
17
|
+
"node-opcua-constants": "2.174.0",
|
|
18
|
+
"node-opcua-data-model": "2.174.0",
|
|
19
|
+
"node-opcua-data-value": "2.174.0",
|
|
20
20
|
"node-opcua-debug": "2.172.0",
|
|
21
|
-
"node-opcua-extension-object": "2.
|
|
22
|
-
"node-opcua-nodeid": "2.
|
|
23
|
-
"node-opcua-service-translate-browse-path": "2.
|
|
24
|
-
"node-opcua-status-code": "2.
|
|
25
|
-
"node-opcua-types": "2.
|
|
26
|
-
"node-opcua-variant": "2.
|
|
21
|
+
"node-opcua-extension-object": "2.174.0",
|
|
22
|
+
"node-opcua-nodeid": "2.174.0",
|
|
23
|
+
"node-opcua-service-translate-browse-path": "2.174.0",
|
|
24
|
+
"node-opcua-status-code": "2.173.0",
|
|
25
|
+
"node-opcua-types": "2.174.0",
|
|
26
|
+
"node-opcua-variant": "2.174.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"node-opcua-numeric-range": "2.
|
|
30
|
-
"node-opcua-packet-analyzer": "2.
|
|
29
|
+
"node-opcua-numeric-range": "2.174.0",
|
|
30
|
+
"node-opcua-packet-analyzer": "2.174.0"
|
|
31
31
|
},
|
|
32
32
|
"author": "Etienne Rossignon",
|
|
33
33
|
"license": "MIT",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"internet of things"
|
|
45
45
|
],
|
|
46
46
|
"homepage": "http://node-opcua.github.io/",
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "011657a3a4805ad106df7381c24ed84e2a18d8f1",
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|
|
50
50
|
"source"
|
|
@@ -24,17 +24,15 @@ export function checkSelectClause(parentNode: BaseNode, selectClause: SimpleAttr
|
|
|
24
24
|
if (selectClause.typeDefinitionId.isEmpty()) {
|
|
25
25
|
return StatusCodes.Good;
|
|
26
26
|
}
|
|
27
|
-
const eventTypeNode = addressSpace.findEventType(selectClause.typeDefinitionId)
|
|
27
|
+
const eventTypeNode = addressSpace.findEventType(selectClause.typeDefinitionId);
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
debugLog(" checkSelectClause", eventTypeNode.toString());
|
|
33
|
-
}
|
|
29
|
+
// the typeDefinitionId must reference an existing node ...
|
|
30
|
+
if (!eventTypeNode) {
|
|
31
|
+
return StatusCodes.BadNodeIdUnknown;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
|
-
// c8 ignore next
|
|
33
|
+
// ... and that node must be an ObjectType (an EventType)
|
|
37
34
|
if (eventTypeNode.nodeClass !== NodeClass.ObjectType) {
|
|
35
|
+
debugLog(" checkSelectClause", eventTypeNode.toString());
|
|
38
36
|
return StatusCodes.BadTypeMismatch;
|
|
39
37
|
}
|
|
40
38
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ContentFilter,
|
|
3
|
+
ContentFilterElement,
|
|
3
4
|
FilterOperator,
|
|
4
5
|
LiteralOperand,
|
|
5
6
|
SimpleAttributeOperand,
|
|
@@ -11,6 +12,7 @@ import { ExtensionObject } from "node-opcua-extension-object";
|
|
|
11
12
|
import { DataType, Variant } from "node-opcua-variant";
|
|
12
13
|
import { NodeClass } from "node-opcua-data-model";
|
|
13
14
|
import { NodeId, sameNodeId } from "node-opcua-nodeid";
|
|
15
|
+
import { type StatusCode, StatusCodes } from "node-opcua-status-code";
|
|
14
16
|
import { make_warningLog } from "node-opcua-debug";
|
|
15
17
|
//
|
|
16
18
|
import { FilterContext } from "./filter_context";
|
|
@@ -345,6 +347,127 @@ function checkFilterAtIndex(filterContext: FilterContext, filter: ContentFilter,
|
|
|
345
347
|
}
|
|
346
348
|
}
|
|
347
349
|
|
|
350
|
+
// Number of operands each FilterOperator expects, as per OPC UA Part 4 - Table 118 / Table 119.
|
|
351
|
+
// `max = Infinity` is used for the variadic InList operator (2..n). Operators not listed here are
|
|
352
|
+
// not subject to an operand-count check.
|
|
353
|
+
const operandCountByOperator: { [operator: number]: { min: number; max: number } } = {
|
|
354
|
+
[FilterOperator.Equals]: { min: 2, max: 2 },
|
|
355
|
+
[FilterOperator.IsNull]: { min: 1, max: 1 },
|
|
356
|
+
[FilterOperator.GreaterThan]: { min: 2, max: 2 },
|
|
357
|
+
[FilterOperator.LessThan]: { min: 2, max: 2 },
|
|
358
|
+
[FilterOperator.GreaterThanOrEqual]: { min: 2, max: 2 },
|
|
359
|
+
[FilterOperator.LessThanOrEqual]: { min: 2, max: 2 },
|
|
360
|
+
[FilterOperator.Like]: { min: 2, max: 2 },
|
|
361
|
+
[FilterOperator.Not]: { min: 1, max: 1 },
|
|
362
|
+
[FilterOperator.Between]: { min: 3, max: 3 },
|
|
363
|
+
[FilterOperator.InList]: { min: 2, max: Number.POSITIVE_INFINITY },
|
|
364
|
+
[FilterOperator.And]: { min: 2, max: 2 },
|
|
365
|
+
[FilterOperator.Or]: { min: 2, max: 2 },
|
|
366
|
+
[FilterOperator.Cast]: { min: 2, max: 2 },
|
|
367
|
+
[FilterOperator.BitwiseAnd]: { min: 2, max: 2 },
|
|
368
|
+
[FilterOperator.BitwiseOr]: { min: 2, max: 2 },
|
|
369
|
+
[FilterOperator.InView]: { min: 1, max: 1 },
|
|
370
|
+
[FilterOperator.OfType]: { min: 1, max: 1 },
|
|
371
|
+
[FilterOperator.RelatedTo]: { min: 6, max: 6 }
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Validate the structure of a ContentFilter, returning a precise StatusCode (Good when valid).
|
|
376
|
+
*
|
|
377
|
+
* The following OPC UA Part 4 - 7.7 rules are enforced over the elements that are reachable from the
|
|
378
|
+
* starting element (index 0); elements that cannot be traced back to the starting element are
|
|
379
|
+
* ignored (7.7.1):
|
|
380
|
+
* - each operator carries the number of operands defined by Table 118 / Table 119, otherwise
|
|
381
|
+
* `BadFilterOperandCountMismatch` ("Extra operands for any operator shall result in an error");
|
|
382
|
+
* - each ElementOperand references an existing element (in-bounds), otherwise
|
|
383
|
+
* `BadFilterElementInvalid`;
|
|
384
|
+
* - the reference graph is acyclic, otherwise `BadFilterElementInvalid` ("The evaluation shall not
|
|
385
|
+
* introduce loops").
|
|
386
|
+
*
|
|
387
|
+
* The traversal is iterative so that validating a deeply-nested filter cannot itself exhaust the
|
|
388
|
+
* stack.
|
|
389
|
+
*/
|
|
390
|
+
export function validateContentFilter(filter: ContentFilter): StatusCode {
|
|
391
|
+
const elements = (filter.elements as ContentFilterElement[] | null) || [];
|
|
392
|
+
const n = elements.length;
|
|
393
|
+
if (n === 0) {
|
|
394
|
+
return StatusCodes.Good;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// inspect a single element: validate its operand count and collect the in-bounds indices it
|
|
398
|
+
// references through ElementOperands. `status` is non-Good when the element is malformed.
|
|
399
|
+
const inspect = (elementIndex: number): { targets: number[]; status: StatusCode } => {
|
|
400
|
+
const element = elements[elementIndex];
|
|
401
|
+
// an element of the array may be null/undefined (e.g. a null ExtensionObject); see checkFilterAtIndex
|
|
402
|
+
if (!element) {
|
|
403
|
+
return { targets: [], status: StatusCodes.Good };
|
|
404
|
+
}
|
|
405
|
+
const operands = (element.filterOperands as FilterOperand[] | null) || [];
|
|
406
|
+
const expected = operandCountByOperator[element.filterOperator];
|
|
407
|
+
if (expected && (operands.length < expected.min || operands.length > expected.max)) {
|
|
408
|
+
warningLog(
|
|
409
|
+
`checkFilter: operator ${FilterOperator[element.filterOperator]} of element #${elementIndex} ` +
|
|
410
|
+
`has ${operands.length} operand(s), expected ${expected.min}${
|
|
411
|
+
expected.max === expected.min ? "" : `..${expected.max === Number.POSITIVE_INFINITY ? "n" : expected.max}`
|
|
412
|
+
}`
|
|
413
|
+
);
|
|
414
|
+
return { targets: [], status: StatusCodes.BadFilterOperandCountMismatch };
|
|
415
|
+
}
|
|
416
|
+
const targets: number[] = [];
|
|
417
|
+
for (const operand of operands) {
|
|
418
|
+
if (operand instanceof ElementOperand) {
|
|
419
|
+
const index = operand.index;
|
|
420
|
+
if (index < 0 || index >= n) {
|
|
421
|
+
warningLog(
|
|
422
|
+
`checkFilter: ElementOperand of element #${elementIndex} references out-of-bounds element #${index} ` +
|
|
423
|
+
`(elements.length = ${n})`
|
|
424
|
+
);
|
|
425
|
+
return { targets: [], status: StatusCodes.BadFilterElementInvalid };
|
|
426
|
+
}
|
|
427
|
+
targets.push(index);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return { targets, status: StatusCodes.Good };
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
// 0 = unvisited, 1 = on the current DFS path, 2 = fully explored
|
|
434
|
+
const color = new Array<number>(n).fill(0);
|
|
435
|
+
|
|
436
|
+
const root = inspect(0);
|
|
437
|
+
if (root.status.isNot(StatusCodes.Good)) {
|
|
438
|
+
return root.status;
|
|
439
|
+
}
|
|
440
|
+
color[0] = 1;
|
|
441
|
+
const stack: Array<{ node: number; targets: number[]; pos: number }> = [{ node: 0, targets: root.targets, pos: 0 }];
|
|
442
|
+
|
|
443
|
+
while (stack.length > 0) {
|
|
444
|
+
const frame = stack[stack.length - 1];
|
|
445
|
+
if (frame.pos >= frame.targets.length) {
|
|
446
|
+
color[frame.node] = 2;
|
|
447
|
+
stack.pop();
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
const next = frame.targets[frame.pos++];
|
|
451
|
+
if (color[next] === 1) {
|
|
452
|
+
// a back edge to an element still on the current path -> cycle
|
|
453
|
+
warningLog(`checkFilter: cyclic ElementOperand reference detected involving element #${next}`);
|
|
454
|
+
return StatusCodes.BadFilterElementInvalid;
|
|
455
|
+
}
|
|
456
|
+
if (color[next] === 0) {
|
|
457
|
+
const r = inspect(next);
|
|
458
|
+
if (r.status.isNot(StatusCodes.Good)) {
|
|
459
|
+
return r.status;
|
|
460
|
+
}
|
|
461
|
+
color[next] = 1;
|
|
462
|
+
stack.push({ node: next, targets: r.targets, pos: 0 });
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return StatusCodes.Good;
|
|
466
|
+
}
|
|
467
|
+
|
|
348
468
|
export function checkFilter(filterContext: FilterContext, contentFilter: ContentFilter): boolean {
|
|
469
|
+
if (validateContentFilter(contentFilter).isNot(StatusCodes.Good)) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
349
472
|
return checkFilterAtIndex(filterContext, contentFilter, 0);
|
|
350
473
|
}
|