arkanalyzer 1.0.41 → 1.0.43

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.
Files changed (110) hide show
  1. package/config/arkanalyzer.json +1 -2
  2. package/lib/Scene.d.ts.map +1 -1
  3. package/lib/Scene.js +52 -38
  4. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +11 -5
  5. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
  6. package/lib/callgraph/pointerAnalysis/PTAUtils.js +42 -24
  7. package/lib/callgraph/pointerAnalysis/Pag.d.ts +6 -11
  8. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/Pag.js +26 -23
  10. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +11 -63
  11. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  12. package/lib/callgraph/pointerAnalysis/PagBuilder.js +72 -499
  13. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  14. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  15. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts +24 -0
  16. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.d.ts.map +1 -0
  17. package/lib/callgraph/pointerAnalysis/plugins/ContainerPlugin.js +167 -0
  18. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts +26 -0
  19. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.d.ts.map +1 -0
  20. package/lib/callgraph/pointerAnalysis/plugins/FunctionPlugin.js +151 -0
  21. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts +15 -0
  22. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.d.ts.map +1 -0
  23. package/lib/callgraph/pointerAnalysis/plugins/IPagPlugin.js +16 -0
  24. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts +25 -0
  25. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.d.ts.map +1 -0
  26. package/lib/callgraph/pointerAnalysis/plugins/PluginManager.js +66 -0
  27. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts +37 -0
  28. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.d.ts.map +1 -0
  29. package/lib/callgraph/pointerAnalysis/plugins/SdkPlugin.js +160 -0
  30. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts +68 -0
  31. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.d.ts.map +1 -0
  32. package/lib/callgraph/pointerAnalysis/plugins/StoragePlugin.js +288 -0
  33. package/lib/core/base/Expr.d.ts +1 -0
  34. package/lib/core/base/Expr.d.ts.map +1 -1
  35. package/lib/core/base/Expr.js +9 -0
  36. package/lib/core/common/DummyMainCreater.js +1 -1
  37. package/lib/core/common/IRInference.d.ts +1 -1
  38. package/lib/core/common/IRInference.d.ts.map +1 -1
  39. package/lib/core/common/IRInference.js +7 -3
  40. package/lib/core/common/ModelUtils.js +1 -1
  41. package/lib/core/common/SdkUtils.d.ts +3 -2
  42. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  43. package/lib/core/common/SdkUtils.js +30 -30
  44. package/lib/core/common/TypeInference.d.ts.map +1 -1
  45. package/lib/core/common/TypeInference.js +7 -5
  46. package/lib/core/dataflow/DataflowSolver.js +3 -3
  47. package/lib/core/dataflow/UndefinedVariable.js +2 -2
  48. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  49. package/lib/core/graph/BasicBlock.js +9 -4
  50. package/lib/core/graph/Cfg.d.ts.map +1 -1
  51. package/lib/core/graph/Cfg.js +4 -1
  52. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  53. package/lib/core/graph/builder/CfgBuilder.js +4 -4
  54. package/lib/core/graph/builder/ConditionBuilder.d.ts +2 -1
  55. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
  56. package/lib/core/graph/builder/ConditionBuilder.js +8 -4
  57. package/lib/core/graph/builder/TrapBuilder.d.ts +19 -1
  58. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
  59. package/lib/core/graph/builder/TrapBuilder.js +195 -68
  60. package/lib/core/model/ArkClass.d.ts.map +1 -1
  61. package/lib/core/model/ArkClass.js +2 -1
  62. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  63. package/lib/core/model/ArkMethod.js +3 -4
  64. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  65. package/lib/core/model/builder/ArkClassBuilder.js +24 -20
  66. package/lib/core/model/builder/ArkImportBuilder.js +28 -25
  67. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  68. package/lib/core/model/builder/ArkMethodBuilder.js +1 -2
  69. package/lib/core/model/builder/BodyBuilder.js +1 -1
  70. package/lib/pass/Context.d.ts +47 -0
  71. package/lib/pass/Context.d.ts.map +1 -0
  72. package/lib/pass/Context.js +72 -0
  73. package/lib/pass/Dispatcher.d.ts +102 -0
  74. package/lib/pass/Dispatcher.d.ts.map +1 -0
  75. package/lib/pass/Dispatcher.js +202 -0
  76. package/lib/pass/Pass.d.ts +83 -0
  77. package/lib/pass/Pass.d.ts.map +1 -0
  78. package/lib/pass/Pass.js +95 -0
  79. package/lib/pass/ScenePassMgr.d.ts +73 -0
  80. package/lib/pass/ScenePassMgr.d.ts.map +1 -0
  81. package/lib/pass/ScenePassMgr.js +156 -0
  82. package/lib/pass/validators/Exprs.d.ts +9 -0
  83. package/lib/pass/validators/Exprs.d.ts.map +1 -0
  84. package/lib/pass/validators/Exprs.js +40 -0
  85. package/lib/pass/validators/Models.d.ts +14 -0
  86. package/lib/pass/validators/Models.d.ts.map +1 -0
  87. package/lib/pass/validators/Models.js +42 -0
  88. package/lib/pass/validators/SceneValidator.d.ts +19 -0
  89. package/lib/pass/validators/SceneValidator.d.ts.map +1 -0
  90. package/lib/pass/validators/SceneValidator.js +77 -0
  91. package/lib/pass/validators/Stmts.d.ts +7 -0
  92. package/lib/pass/validators/Stmts.d.ts.map +1 -0
  93. package/lib/pass/validators/Stmts.js +36 -0
  94. package/lib/pass/validators/Validator.d.ts +207 -0
  95. package/lib/pass/validators/Validator.d.ts.map +1 -0
  96. package/lib/pass/validators/Validator.js +343 -0
  97. package/lib/pass/validators/Values.d.ts +7 -0
  98. package/lib/pass/validators/Values.d.ts.map +1 -0
  99. package/lib/pass/validators/Values.js +34 -0
  100. package/lib/save/JsonPrinter.d.ts.map +1 -1
  101. package/lib/save/JsonPrinter.js +26 -102
  102. package/lib/save/source/SourceStmt.d.ts +1 -0
  103. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  104. package/lib/save/source/SourceStmt.js +5 -8
  105. package/lib/utils/FileUtils.d.ts.map +1 -1
  106. package/lib/utils/FileUtils.js +13 -6
  107. package/lib/utils/ValueAsserts.d.ts +9 -0
  108. package/lib/utils/ValueAsserts.d.ts.map +1 -0
  109. package/lib/utils/ValueAsserts.js +89 -0
  110. package/package.json +2 -2
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SdkPlugin = void 0;
18
+ const Expr_1 = require("../../../core/base/Expr");
19
+ const Local_1 = require("../../../core/base/Local");
20
+ const Stmt_1 = require("../../../core/base/Stmt");
21
+ const Type_1 = require("../../../core/base/Type");
22
+ const Pag_1 = require("../Pag");
23
+ const PTAUtils_1 = require("../PTAUtils");
24
+ /**
25
+ * SdkPlugin processes OpenHarmony and built-in SDK APIs.
26
+ * creates fake PAG nodes for SDK method return values and parameters.
27
+ */
28
+ class SdkPlugin {
29
+ constructor(pag, pagBuilder, cg) {
30
+ this.pag = pag;
31
+ this.pagBuilder = pagBuilder;
32
+ this.cg = cg;
33
+ this.sdkMethodReturnValueMap = new Map();
34
+ this.methodParamValueMap = new Map();
35
+ this.fakeSdkMethodParamDeclaringStmt = new Stmt_1.ArkAssignStmt(new Local_1.Local(''), new Local_1.Local(''));
36
+ }
37
+ getName() {
38
+ return 'SdkPlugin';
39
+ }
40
+ canHandle(cs, cgNode) {
41
+ let methodType = (0, PTAUtils_1.getBuiltInApiType)(cgNode.getMethod());
42
+ return cgNode.isSdkMethod() && (methodType === PTAUtils_1.BuiltApiType.NotBuiltIn);
43
+ }
44
+ processCallSite(cs, cid, basePTNode) {
45
+ let srcNodes = [];
46
+ this.addSDKMethodPagCallEdge(cs, cid, 0, srcNodes);
47
+ return srcNodes;
48
+ }
49
+ addSDKMethodPagCallEdge(cs, callerCid, calleeCid, srcNodes) {
50
+ let calleeFuncID = cs.getCalleeFuncID();
51
+ let calleeNode = this.cg.getNode(calleeFuncID);
52
+ let calleeMethod = this.cg.getArkMethodByFuncID(calleeFuncID);
53
+ if (!calleeMethod) {
54
+ return;
55
+ }
56
+ if (!this.methodParamValueMap.has(calleeNode.getID())) {
57
+ this.buildSDKFuncPag(calleeNode.getID(), calleeMethod);
58
+ }
59
+ this.addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes);
60
+ this.addSDKMethodParamPagEdge(cs, callerCid, calleeCid, calleeNode.getID(), srcNodes);
61
+ return;
62
+ }
63
+ /**
64
+ * will not create real funcPag, only create param values
65
+ */
66
+ buildSDKFuncPag(funcID, sdkMethod) {
67
+ let paramArr = this.createDummyParamValue(sdkMethod);
68
+ this.methodParamValueMap.set(funcID, paramArr);
69
+ }
70
+ createDummyParamValue(sdkMethod) {
71
+ let args = sdkMethod.getParameters();
72
+ let paramArr = [];
73
+ if (!args) {
74
+ return paramArr;
75
+ }
76
+ // Local
77
+ args.forEach((arg) => {
78
+ let argInstance = new Local_1.Local(arg.getName(), arg.getType());
79
+ argInstance.setDeclaringStmt(this.fakeSdkMethodParamDeclaringStmt);
80
+ paramArr.push(argInstance);
81
+ });
82
+ return paramArr;
83
+ }
84
+ addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes) {
85
+ let returnType = calleeMethod.getReturnType();
86
+ if (!(returnType instanceof Type_1.ClassType) || !(cs.callStmt instanceof Stmt_1.ArkAssignStmt)) {
87
+ return;
88
+ }
89
+ // check fake heap object exists or not
90
+ let cidMap = this.sdkMethodReturnValueMap.get(calleeMethod);
91
+ if (!cidMap) {
92
+ cidMap = new Map();
93
+ }
94
+ let newExpr = cidMap.get(calleeCid);
95
+ if (!newExpr) {
96
+ if (returnType instanceof Type_1.ClassType) {
97
+ newExpr = new Expr_1.ArkNewExpr(returnType);
98
+ }
99
+ }
100
+ cidMap.set(calleeCid, newExpr);
101
+ this.sdkMethodReturnValueMap.set(calleeMethod, cidMap);
102
+ let srcPagNode = this.pagBuilder.getOrNewPagNode(calleeCid, newExpr);
103
+ let dstPagNode = this.pagBuilder.getOrNewPagNode(callerCid, cs.callStmt.getLeftOp(), cs.callStmt);
104
+ this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Address, cs.callStmt);
105
+ srcNodes.push(srcPagNode.getID());
106
+ return;
107
+ }
108
+ /**
109
+ * process the anonymous method param, create a new CallSite for it and invoke it.
110
+ */
111
+ addSDKMethodParamPagEdge(cs, callerCid, calleeCid, funcID, srcNodes) {
112
+ var _a, _b;
113
+ let argNum = (_a = cs.args) === null || _a === void 0 ? void 0 : _a.length;
114
+ if (!argNum) {
115
+ return;
116
+ }
117
+ // add args to parameters edges
118
+ for (let i = 0; i < argNum; i++) {
119
+ let arg = (_b = cs.args) === null || _b === void 0 ? void 0 : _b[i];
120
+ let paramValue;
121
+ if (arg instanceof Local_1.Local && arg.getType() instanceof Type_1.FunctionType) {
122
+ paramValue = this.methodParamValueMap.get(funcID)[i];
123
+ }
124
+ else {
125
+ continue;
126
+ }
127
+ if (!(arg && paramValue)) {
128
+ continue;
129
+ }
130
+ // Get or create new PAG node for argument and parameter
131
+ let srcPagNode = this.pagBuilder.getOrNewPagNode(callerCid, arg, cs.callStmt);
132
+ let dstPagNode = this.pagBuilder.getOrNewPagNode(calleeCid, paramValue, cs.callStmt);
133
+ if (dstPagNode instanceof Pag_1.PagLocalNode) {
134
+ // set the fake param Value in PagLocalNode
135
+ /**
136
+ * TODO: !!!
137
+ * some API param is in the form of anonymous method:
138
+ * component/common.d.ts
139
+ * declare function animateTo(value: AnimateParam, event: () => void): void;
140
+ *
141
+ * this param fake Value will create PagFuncNode rather than PagLocalNode
142
+ * when this API is called, the anonymous method pointer will not be able to pass into the fake Value PagNode
143
+ */
144
+ dstPagNode.setSdkParam();
145
+ let sdkParamInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkPtrInvokeExpr(arg.getType().getMethodSignature(), paramValue, []));
146
+ // create new DynCallSite
147
+ let sdkParamCallSite = this.cg.getCallSiteManager().newDynCallSite(sdkParamInvokeStmt, undefined, undefined, funcID);
148
+ dstPagNode.addRelatedDynCallSite(sdkParamCallSite);
149
+ }
150
+ this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
151
+ srcNodes.push(srcPagNode.getID());
152
+ }
153
+ return;
154
+ }
155
+ getParamValues(method) {
156
+ const funcID = this.cg.getCallGraphNodeByMethod(method.getSignature()).getID();
157
+ return this.methodParamValueMap.get(funcID);
158
+ }
159
+ }
160
+ exports.SdkPlugin = SdkPlugin;
@@ -0,0 +1,68 @@
1
+ import { Stmt } from '../../../core/base/Stmt';
2
+ import { Value } from '../../../core/base/Value';
3
+ import { NodeID } from '../../../core/graph/GraphTraits';
4
+ import { CallGraph, CallGraphNode } from '../../model/CallGraph';
5
+ import { ICallSite } from '../../model/CallSite';
6
+ import { ContextID } from '../context/Context';
7
+ import { Pag, PagNode } from '../Pag';
8
+ import { PagBuilder } from '../PagBuilder';
9
+ import { IPagPlugin } from './IPagPlugin';
10
+ export declare enum StorageType {
11
+ APP_STORAGE = 0,
12
+ LOCAL_STORAGE = 1,
13
+ SUBSCRIBED_ABSTRACT_PROPERTY = 2,
14
+ Undefined = 3
15
+ }
16
+ export declare enum StorageLinkEdgeType {
17
+ Property2Local = 0,
18
+ Local2Property = 1,
19
+ TwoWay = 2
20
+ }
21
+ /**
22
+ * StoragePlugin processes AppStorage, LocalStorage, and SubscribedAbstractProperty APIs.
23
+ */
24
+ export declare class StoragePlugin implements IPagPlugin {
25
+ pag: Pag;
26
+ pagBuilder: PagBuilder;
27
+ cg: CallGraph;
28
+ private storagePropertyMap;
29
+ constructor(pag: Pag, pagBuilder: PagBuilder, cg: CallGraph);
30
+ getName(): string;
31
+ canHandle(cs: ICallSite, cgNode: CallGraphNode): boolean;
32
+ processCallSite(cs: ICallSite, cid: ContextID, emptyNode: NodeID): NodeID[];
33
+ /**
34
+ * get storageType enum with method's Declaring ClassName
35
+ *
36
+ * @param storageName ClassName that method belongs to, currently support AppStorage and SubscribedAbstractProperty
37
+ * SubscribedAbstractProperty: in following listing, `link1` is infered as ClassType `SubscribedAbstractProperty`,
38
+ * it needs to get PAG node to check the StorageType
39
+ * let link1: SubscribedAbstractProperty<A> = AppStorage.link('PropA');
40
+ * link1.set(a);
41
+ * @param cs: for search PAG node in SubscribedAbstractProperty
42
+ * @param cid: for search PAG node in SubscribedAbstractProperty
43
+ * @returns StorageType enum
44
+ */
45
+ private getStorageType;
46
+ private processStorageAPI;
47
+ private processStorageSetOrCreate;
48
+ /**
49
+ * search the storage map to get propertyNode with given storage and propertyFieldName
50
+ * @param storage storage type: AppStorage, LocalStorage etc.
51
+ * @param propertyName string property key
52
+ * @returns propertyNode: PagLocalNode
53
+ */
54
+ getOrNewPropertyNode(storage: StorageType, propertyName: string): PagNode;
55
+ /**
56
+ * add PagEdge
57
+ * @param edgeKind: edge kind differs from API
58
+ * @param propertyNode: PAG node created by protpertyName
59
+ * @param obj: heapObj stored with Storage API
60
+ */
61
+ addPropertyLinkEdge(propertyNode: PagNode, storageObj: Value, cid: ContextID, stmt: Stmt, edgeKind: number, srcNodes: NodeID[]): void;
62
+ private processStorageLink;
63
+ private processStorageProp;
64
+ private processStorageSet;
65
+ private processStorageGet;
66
+ private getPropertyName;
67
+ }
68
+ //# sourceMappingURL=StoragePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoragePlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/StoragePlugin.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,IAAI,EAAiB,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAA6B,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oBAAY,WAAW;IACnB,WAAW,IAAA;IACX,aAAa,IAAA;IACb,4BAA4B,IAAA;IAC5B,SAAS,IAAA;CACZ;AAED,oBAAY,mBAAmB;IAC3B,cAAc,IAAA;IACd,cAAc,IAAA;IACd,MAAM,IAAA;CACT;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC5C,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,CAAC,kBAAkB,CAAmD;gBAEjE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAU3D,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;IAKxD,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAc3E;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,yBAAyB;IAoBjC;;;;;OAKG;IACI,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAsBhF;;;;;OAKG;IACI,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAuB5I,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,eAAe;CAY1B"}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.StoragePlugin = exports.StorageLinkEdgeType = exports.StorageType = void 0;
18
+ const Constant_1 = require("../../../core/base/Constant");
19
+ const Expr_1 = require("../../../core/base/Expr");
20
+ const Local_1 = require("../../../core/base/Local");
21
+ const Stmt_1 = require("../../../core/base/Stmt");
22
+ const Type_1 = require("../../../core/base/Type");
23
+ const Pag_1 = require("../Pag");
24
+ var StorageType;
25
+ (function (StorageType) {
26
+ StorageType[StorageType["APP_STORAGE"] = 0] = "APP_STORAGE";
27
+ StorageType[StorageType["LOCAL_STORAGE"] = 1] = "LOCAL_STORAGE";
28
+ StorageType[StorageType["SUBSCRIBED_ABSTRACT_PROPERTY"] = 2] = "SUBSCRIBED_ABSTRACT_PROPERTY";
29
+ StorageType[StorageType["Undefined"] = 3] = "Undefined";
30
+ })(StorageType = exports.StorageType || (exports.StorageType = {}));
31
+ ;
32
+ var StorageLinkEdgeType;
33
+ (function (StorageLinkEdgeType) {
34
+ StorageLinkEdgeType[StorageLinkEdgeType["Property2Local"] = 0] = "Property2Local";
35
+ StorageLinkEdgeType[StorageLinkEdgeType["Local2Property"] = 1] = "Local2Property";
36
+ StorageLinkEdgeType[StorageLinkEdgeType["TwoWay"] = 2] = "TwoWay";
37
+ })(StorageLinkEdgeType = exports.StorageLinkEdgeType || (exports.StorageLinkEdgeType = {}));
38
+ ;
39
+ /**
40
+ * StoragePlugin processes AppStorage, LocalStorage, and SubscribedAbstractProperty APIs.
41
+ */
42
+ class StoragePlugin {
43
+ constructor(pag, pagBuilder, cg) {
44
+ this.storagePropertyMap = new Map();
45
+ this.pag = pag;
46
+ this.pagBuilder = pagBuilder;
47
+ this.cg = cg;
48
+ // Initialize storagePropertyMap for each StorageType
49
+ this.storagePropertyMap.set(StorageType.APP_STORAGE, new Map());
50
+ this.storagePropertyMap.set(StorageType.LOCAL_STORAGE, new Map());
51
+ }
52
+ getName() {
53
+ return 'StoragePlugin';
54
+ }
55
+ canHandle(cs, cgNode) {
56
+ const storageName = cgNode.getMethod().getDeclaringClassSignature().getClassName();
57
+ return this.getStorageType(storageName) !== StorageType.Undefined;
58
+ }
59
+ processCallSite(cs, cid, emptyNode) {
60
+ let calleeFuncID = cs.getCalleeFuncID();
61
+ if (!calleeFuncID) {
62
+ return [];
63
+ }
64
+ const cgNode = this.cg.getNode(calleeFuncID);
65
+ const storageName = cgNode.getMethod().getDeclaringClassSignature().getClassName();
66
+ const storageType = this.getStorageType(storageName);
67
+ const calleeName = cgNode.getMethod().getMethodSubSignature().getMethodName();
68
+ return this.processStorageAPI(cs, cid, storageType, calleeName, this.pagBuilder);
69
+ }
70
+ /**
71
+ * get storageType enum with method's Declaring ClassName
72
+ *
73
+ * @param storageName ClassName that method belongs to, currently support AppStorage and SubscribedAbstractProperty
74
+ * SubscribedAbstractProperty: in following listing, `link1` is infered as ClassType `SubscribedAbstractProperty`,
75
+ * it needs to get PAG node to check the StorageType
76
+ * let link1: SubscribedAbstractProperty<A> = AppStorage.link('PropA');
77
+ * link1.set(a);
78
+ * @param cs: for search PAG node in SubscribedAbstractProperty
79
+ * @param cid: for search PAG node in SubscribedAbstractProperty
80
+ * @returns StorageType enum
81
+ */
82
+ getStorageType(storageName) {
83
+ switch (storageName) {
84
+ case 'AppStorage':
85
+ return StorageType.APP_STORAGE;
86
+ case 'SubscribedAbstractProperty':
87
+ return StorageType.SUBSCRIBED_ABSTRACT_PROPERTY;
88
+ case 'LocalStorage':
89
+ return StorageType.LOCAL_STORAGE;
90
+ default:
91
+ return StorageType.Undefined;
92
+ }
93
+ }
94
+ processStorageAPI(cs, cid, storageType, calleeName, pagBuilder) {
95
+ let srcNodes = [];
96
+ switch (calleeName) {
97
+ case 'setOrCreate':
98
+ this.processStorageSetOrCreate(cs, cid, storageType, srcNodes);
99
+ break;
100
+ case 'link':
101
+ this.processStorageLink(cs, cid, storageType, srcNodes);
102
+ break;
103
+ case 'prop':
104
+ this.processStorageProp(cs, cid, storageType, srcNodes);
105
+ break;
106
+ case 'set':
107
+ this.processStorageSet(cs, cid, storageType, srcNodes);
108
+ break;
109
+ case 'get':
110
+ this.processStorageGet(cs, cid, storageType, srcNodes);
111
+ break;
112
+ default:
113
+ break;
114
+ }
115
+ ;
116
+ return srcNodes;
117
+ }
118
+ processStorageSetOrCreate(cs, cid, storageType, srcNodes) {
119
+ let propertyStr = this.getPropertyName(cs.args[0]);
120
+ if (!propertyStr) {
121
+ return;
122
+ }
123
+ let propertyName = propertyStr;
124
+ let propertyNode = this.getOrNewPropertyNode(StorageType.APP_STORAGE, propertyName);
125
+ if (storageType === StorageType.APP_STORAGE) {
126
+ let storageObj = cs.args[1];
127
+ this.addPropertyLinkEdge(propertyNode, storageObj, cid, cs.callStmt, StorageLinkEdgeType.Local2Property, srcNodes);
128
+ }
129
+ else if (storageType === StorageType.LOCAL_STORAGE) {
130
+ // TODO: WIP
131
+ }
132
+ return;
133
+ }
134
+ /**
135
+ * search the storage map to get propertyNode with given storage and propertyFieldName
136
+ * @param storage storage type: AppStorage, LocalStorage etc.
137
+ * @param propertyName string property key
138
+ * @returns propertyNode: PagLocalNode
139
+ */
140
+ getOrNewPropertyNode(storage, propertyName) {
141
+ let storageMap = this.storagePropertyMap.get(storage);
142
+ let propertyLocal = storageMap.get(propertyName);
143
+ if (!propertyLocal) {
144
+ switch (storage) {
145
+ case StorageType.APP_STORAGE:
146
+ propertyLocal = new Local_1.Local('AppStorage.' + propertyName);
147
+ break;
148
+ case StorageType.LOCAL_STORAGE:
149
+ propertyLocal = new Local_1.Local('LocalStorage.' + propertyName);
150
+ break;
151
+ default:
152
+ propertyLocal = new Local_1.Local(propertyName);
153
+ }
154
+ ;
155
+ storageMap.set(propertyName, propertyLocal);
156
+ }
157
+ return this.pag.getOrNewNode(-1, propertyLocal);
158
+ }
159
+ /**
160
+ * add PagEdge
161
+ * @param edgeKind: edge kind differs from API
162
+ * @param propertyNode: PAG node created by protpertyName
163
+ * @param obj: heapObj stored with Storage API
164
+ */
165
+ addPropertyLinkEdge(propertyNode, storageObj, cid, stmt, edgeKind, srcNodes) {
166
+ if (!(storageObj.getType() instanceof Type_1.ClassType)) {
167
+ return;
168
+ }
169
+ let objNode = this.pag.getOrNewNode(cid, storageObj);
170
+ if (edgeKind === StorageLinkEdgeType.Property2Local) {
171
+ // propertyNode --> objNode
172
+ this.pag.addPagEdge(propertyNode, objNode, Pag_1.PagEdgeKind.Copy, stmt);
173
+ srcNodes.push(propertyNode.getID());
174
+ }
175
+ else if (edgeKind === StorageLinkEdgeType.Local2Property) {
176
+ // propertyNode <-- objNode
177
+ this.pag.addPagEdge(objNode, propertyNode, Pag_1.PagEdgeKind.Copy, stmt);
178
+ srcNodes.push(objNode.getID());
179
+ }
180
+ else if (edgeKind === StorageLinkEdgeType.TwoWay) {
181
+ // propertyNode <-> objNode
182
+ this.pag.addPagEdge(propertyNode, objNode, Pag_1.PagEdgeKind.Copy, stmt);
183
+ this.pag.addPagEdge(objNode, propertyNode, Pag_1.PagEdgeKind.Copy, stmt);
184
+ srcNodes.push(propertyNode.getID(), objNode.getID());
185
+ }
186
+ return;
187
+ }
188
+ processStorageLink(cs, cid, storageType, srcNodes) {
189
+ let propertyStr = this.getPropertyName(cs.args[0]);
190
+ if (!propertyStr) {
191
+ return;
192
+ }
193
+ let propertyName = propertyStr;
194
+ let propertyNode = this.getOrNewPropertyNode(StorageType.APP_STORAGE, propertyName);
195
+ let leftOp = cs.callStmt.getLeftOp();
196
+ let linkedOpNode = this.pag.getOrNewNode(cid, leftOp);
197
+ if (storageType === StorageType.APP_STORAGE) {
198
+ if (linkedOpNode instanceof Pag_1.PagLocalNode) {
199
+ linkedOpNode.setStorageLink(StorageType.APP_STORAGE, propertyName);
200
+ }
201
+ this.pag.addPagEdge(propertyNode, linkedOpNode, Pag_1.PagEdgeKind.Copy);
202
+ this.pag.addPagEdge(linkedOpNode, propertyNode, Pag_1.PagEdgeKind.Copy);
203
+ srcNodes.push(propertyNode.getID(), linkedOpNode.getID());
204
+ }
205
+ else if (storageType === StorageType.LOCAL_STORAGE) {
206
+ // TODO: WIP
207
+ }
208
+ return;
209
+ }
210
+ processStorageProp(cs, cid, storageType, srcNodes) {
211
+ let propertyStr = this.getPropertyName(cs.args[0]);
212
+ if (!propertyStr) {
213
+ return;
214
+ }
215
+ let propertyName = propertyStr;
216
+ let propertyNode = this.getOrNewPropertyNode(StorageType.APP_STORAGE, propertyName);
217
+ let leftOp = cs.callStmt.getLeftOp();
218
+ let propedOpNode = this.pag.getOrNewNode(cid, leftOp);
219
+ if (storageType === StorageType.APP_STORAGE) {
220
+ if (propedOpNode instanceof Pag_1.PagLocalNode) {
221
+ propedOpNode.setStorageLink(StorageType.APP_STORAGE, propertyName);
222
+ }
223
+ this.pag.addPagEdge(propertyNode, propedOpNode, Pag_1.PagEdgeKind.Copy);
224
+ srcNodes.push(propertyNode.getID());
225
+ }
226
+ else if (storageType === StorageType.LOCAL_STORAGE) {
227
+ // TODO: WIP
228
+ }
229
+ return;
230
+ }
231
+ processStorageSet(cs, cid, storageType, srcNodes) {
232
+ let ivkExpr = cs.callStmt.getInvokeExpr();
233
+ if (ivkExpr instanceof Expr_1.ArkInstanceInvokeExpr) {
234
+ let base = ivkExpr.getBase();
235
+ let baseNode = this.pag.getOrNewNode(cid, base);
236
+ if (baseNode.isStorageLinked()) {
237
+ let argsNode = this.pag.getOrNewNode(cid, cs.args[0]);
238
+ this.pag.addPagEdge(argsNode, baseNode, Pag_1.PagEdgeKind.Copy);
239
+ srcNodes.push(argsNode.getID());
240
+ return;
241
+ }
242
+ }
243
+ else if (ivkExpr instanceof Expr_1.ArkStaticInvokeExpr) {
244
+ // TODO: process AppStorage.set()
245
+ }
246
+ return;
247
+ }
248
+ processStorageGet(cs, cid, storageType, srcNodes) {
249
+ if (!(cs.callStmt instanceof Stmt_1.ArkAssignStmt)) {
250
+ return;
251
+ }
252
+ let leftOp = cs.callStmt.getLeftOp();
253
+ let leftOpNode = this.pag.getOrNewNode(cid, leftOp);
254
+ let ivkExpr = cs.callStmt.getInvokeExpr();
255
+ let propertyName;
256
+ if (ivkExpr instanceof Expr_1.ArkStaticInvokeExpr) {
257
+ let propertyStr = this.getPropertyName(cs.args[0]);
258
+ if (propertyStr) {
259
+ propertyName = propertyStr;
260
+ }
261
+ let propertyNode = this.getOrNewPropertyNode(storageType, propertyName);
262
+ if (!propertyNode) {
263
+ return;
264
+ }
265
+ this.pag.addPagEdge(propertyNode, leftOpNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
266
+ srcNodes.push(propertyNode.getID());
267
+ }
268
+ else if (ivkExpr instanceof Expr_1.ArkInstanceInvokeExpr) {
269
+ let baseNode = this.pag.getOrNewNode(cid, ivkExpr.getBase());
270
+ this.pag.addPagEdge(baseNode, leftOpNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
271
+ srcNodes.push(baseNode.getID());
272
+ }
273
+ return;
274
+ }
275
+ getPropertyName(value) {
276
+ if (value instanceof Local_1.Local) {
277
+ let type = value.getType();
278
+ if (type instanceof Type_1.StringType) {
279
+ return type.getName();
280
+ }
281
+ }
282
+ else if (value instanceof Constant_1.Constant) {
283
+ return value.getValue();
284
+ }
285
+ return undefined;
286
+ }
287
+ }
288
+ exports.StoragePlugin = StoragePlugin;
@@ -120,6 +120,7 @@ export declare class ArkPtrInvokeExpr extends AbstractInvokeExpr {
120
120
  constructor(methodSignature: MethodSignature, ptr: Local | AbstractFieldRef, args: Value[], realGenericTypes?: Type[]);
121
121
  setFunPtrLocal(ptr: Local | AbstractFieldRef): void;
122
122
  getFuncPtrLocal(): Local | AbstractFieldRef;
123
+ inferType(arkMethod: ArkMethod): AbstractInvokeExpr;
123
124
  toString(): string;
124
125
  getUses(): Value[];
125
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"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"}
@@ -231,6 +231,15 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
231
231
  getFuncPtrLocal() {
232
232
  return this.funPtr;
233
233
  }
234
+ inferType(arkMethod) {
235
+ this.getArgs().forEach(arg => TypeInference_1.TypeInference.inferValueType(arg, arkMethod));
236
+ const ptrType = this.funPtr.getType();
237
+ if (ptrType instanceof Type_1.FunctionType) {
238
+ this.setMethodSignature(ptrType.getMethodSignature());
239
+ }
240
+ IRInference_1.IRInference.inferArgs(this, arkMethod);
241
+ return IRInference_1.IRInference.inferStaticInvokeExpr(this, arkMethod);
242
+ }
234
243
  toString() {
235
244
  let strs = [];
236
245
  strs.push('ptrinvoke <');
@@ -228,7 +228,7 @@ class DummyMainCreater {
228
228
  const whileStmt = new Stmt_1.ArkIfStmt(conditionTrue);
229
229
  firstBlock.addStmt(countAssignStmt);
230
230
  dummyCfg.addBlock(firstBlock);
231
- dummyCfg.setStartingStmt(firstBlock.getStmts()[0]);
231
+ dummyCfg.setStartingStmt(firstBlock.getHead());
232
232
  const whileBlock = new BasicBlock_1.BasicBlock();
233
233
  whileBlock.addStmt(whileStmt);
234
234
  dummyCfg.addBlock(whileBlock);
@@ -25,7 +25,7 @@ export declare class IRInference {
25
25
  static inferFieldRef(ref: ArkInstanceFieldRef, arkMethod: ArkMethod): AbstractRef;
26
26
  private static inferBase;
27
27
  static inferThisLocal(arkMethod: ArkMethod): Local | null;
28
- private static inferArgs;
28
+ static inferArgs(expr: AbstractInvokeExpr, arkMethod: ArkMethod): void;
29
29
  private static inferArg;
30
30
  static inferRightWithSdkType(leftType: Type, rightType: Type, ackClass: ArkClass): void;
31
31
  static inferArgTypeWithSdk(sdkType: ClassType, scene: Scene, argType: Type): void;
@@ -1 +1 @@
1
- {"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IRInference.d.ts","sourceRoot":"","sources":["../../../src/core/common/IRInference.ts"],"names":[],"mappings":"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"}
@@ -325,6 +325,7 @@ class IRInference {
325
325
  }
326
326
  }
327
327
  static inferArg(expr, argType, paramType, scene, realTypes) {
328
+ var _a;
328
329
  if (paramType instanceof Type_1.UnionType) {
329
330
  paramType.getTypes().forEach(t => this.inferArg(expr, argType, t, scene, realTypes));
330
331
  }
@@ -346,10 +347,11 @@ class IRInference {
346
347
  realTypes.push(argType);
347
348
  }
348
349
  else if (paramType instanceof Type_1.FunctionType && argType instanceof Type_1.FunctionType) {
349
- if (paramType.getMethodSignature().getParamLength() > 0 && paramType.getMethodSignature().getType() instanceof Type_1.GenericType) {
350
+ const returnType = paramType.getMethodSignature().getType();
351
+ if (paramType.getMethodSignature().getParamLength() > 0 && returnType instanceof Type_1.GenericType) {
350
352
  const paramMethod = scene.getMethod(expr.getMethodSignature());
351
353
  const argMethod = scene.getMethod(argType.getMethodSignature());
352
- if (paramMethod && paramMethod.getGenericTypes() && argMethod) {
354
+ if (argMethod && ((_a = paramMethod === null || paramMethod === void 0 ? void 0 : paramMethod.getGenericTypes()) === null || _a === void 0 ? void 0 : _a.find(t => t === returnType))) {
353
355
  TypeInference_1.TypeInference.inferTypeInMethod(argMethod);
354
356
  }
355
357
  }
@@ -671,7 +673,9 @@ class IRInference {
671
673
  if (type instanceof Type_1.FunctionType) {
672
674
  this.assignAnonMethod(scene.getMethod(type.getMethodSignature()), property);
673
675
  }
674
- anonField.setSignature(new ArkSignature_1.FieldSignature(anonField.getName(), property.getDeclaringArkClass().getSignature(), new Type_1.FunctionType(property.getSignature())));
676
+ if (type instanceof Type_1.UnknownType) {
677
+ anonField.setSignature(new ArkSignature_1.FieldSignature(anonField.getName(), property.getDeclaringArkClass().getSignature(), new Type_1.FunctionType(property.getSignature())));
678
+ }
675
679
  }
676
680
  }
677
681
  for (const anonMethod of anon.getMethods()) {
@@ -516,7 +516,7 @@ function getArkFile(im) {
516
516
  const originPath = path_1.default.resolve(parentPath, from);
517
517
  return getArkFileFromScene(im, originPath);
518
518
  }
519
- else if (/^@[a-z|\-]+?\//.test(from)) {
519
+ else if ((moduleMap === null || moduleMap === void 0 ? void 0 : moduleMap.get(from)) || /^@[a-z|\-]+?\//.test(from)) {
520
520
  //module path
521
521
  const arkFile = getArkFileFromOtherModule(im);
522
522
  if (arkFile) {