arkanalyzer 1.0.68 → 1.0.69

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.
@@ -15,6 +15,7 @@ export declare class SdkPlugin implements IPagPlugin {
15
15
  pagBuilder: PagBuilder;
16
16
  cg: CallGraph;
17
17
  private sdkMethodReturnValueMap;
18
+ private sdkMethodReturnArrayMap;
18
19
  private methodParamValueMap;
19
20
  private fakeSdkMethodParamDeclaringStmt;
20
21
  constructor(pag: Pag, pagBuilder: PagBuilder, cg: CallGraph);
@@ -28,6 +29,9 @@ export declare class SdkPlugin implements IPagPlugin {
28
29
  buildSDKFuncPag(funcID: FuncID, sdkMethod: ArkMethod): void;
29
30
  private createDummyParamValue;
30
31
  private addSDKMethodReturnPagEdge;
32
+ private addSDKMethodReturnArrayPagEdge;
33
+ private addSDKMethodReturnUnionPagEdge;
34
+ private addSDKMethodReturnGenericPagEdge;
31
35
  /**
32
36
  * process the anonymous method param, create a new CallSite for it and invoke it.
33
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SdkPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/SdkPlugin.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAA6B,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,qBAAa,SAAU,YAAW,UAAU;IACxC,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;IAEd,OAAO,CAAC,uBAAuB,CAA6C;IAC5E,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,+BAA+B,CAAO;gBAElC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAS3D,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,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAM5E,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAMlE,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,yBAAyB;IA4BjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsDzB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,SAAS;CAIhE"}
1
+ {"version":3,"file":"SdkPlugin.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/plugins/SdkPlugin.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAA6B,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,qBAAa,SAAU,YAAW,UAAU;IACxC,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,SAAS,CAAC;IAEd,OAAO,CAAC,uBAAuB,CAA6C;IAC5E,OAAO,CAAC,uBAAuB,CAAkD;IACjF,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,+BAA+B,CAAO;gBAElC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS;IAW3D,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,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAM5E,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAMlE,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,8BAA8B;IAsCtC,OAAO,CAAC,8BAA8B;IAkCtC,OAAO,CAAC,gCAAgC;IA6BxC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsDzB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,SAAS;CAIhE"}
@@ -19,6 +19,7 @@ const Expr_1 = require("../../../core/base/Expr");
19
19
  const Local_1 = require("../../../core/base/Local");
20
20
  const Stmt_1 = require("../../../core/base/Stmt");
21
21
  const Type_1 = require("../../../core/base/Type");
22
+ const Const_1 = require("../../../core/common/Const");
22
23
  const Pag_1 = require("../Pag");
23
24
  const PTAUtils_1 = require("../PTAUtils");
24
25
  /**
@@ -31,6 +32,8 @@ class SdkPlugin {
31
32
  this.pagBuilder = pagBuilder;
32
33
  this.cg = cg;
33
34
  this.sdkMethodReturnValueMap = new Map();
35
+ this.sdkMethodReturnArrayMap = new Map();
36
+ this.sdkMethodReturnArrayMap = new Map();
34
37
  this.methodParamValueMap = new Map();
35
38
  this.fakeSdkMethodParamDeclaringStmt = new Stmt_1.ArkAssignStmt(new Local_1.Local(''), new Local_1.Local(''));
36
39
  }
@@ -83,6 +86,23 @@ class SdkPlugin {
83
86
  }
84
87
  addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes) {
85
88
  let returnType = calleeMethod.getReturnType();
89
+ if (returnType instanceof Type_1.ArrayType && cs.callStmt instanceof Stmt_1.ArkAssignStmt) {
90
+ // Handling the return value of collections.Array.creat, return type is ArrayType
91
+ this.addSDKMethodReturnArrayPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes);
92
+ return;
93
+ }
94
+ if (returnType instanceof Type_1.UnionType && cs.callStmt instanceof Stmt_1.ArkAssignStmt) {
95
+ // Handling the return value of ArkTSUtils.ASON.parse, return type is UnionType
96
+ // find real type in UnionType
97
+ this.addSDKMethodReturnUnionPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes);
98
+ return;
99
+ }
100
+ if (returnType instanceof Type_1.GenericType && cs.callStmt instanceof Stmt_1.ArkAssignStmt) {
101
+ // Handling the return value of UIUtils.makeObserved, return type is GenericType
102
+ // find real type in callsite realGenericTypes
103
+ this.addSDKMethodReturnGenericPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes);
104
+ return;
105
+ }
86
106
  if (!(returnType instanceof Type_1.ClassType) || !(cs.callStmt instanceof Stmt_1.ArkAssignStmt)) {
87
107
  return;
88
108
  }
@@ -105,6 +125,100 @@ class SdkPlugin {
105
125
  srcNodes.push(srcPagNode.getID());
106
126
  return;
107
127
  }
128
+ addSDKMethodReturnArrayPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes) {
129
+ var _a;
130
+ let returnType = calleeMethod.getReturnType();
131
+ let callstmt = cs.callStmt;
132
+ let arraycidMap = this.sdkMethodReturnArrayMap.get(calleeMethod);
133
+ if (!arraycidMap) {
134
+ arraycidMap = new Map();
135
+ }
136
+ let newArrayExpr = arraycidMap.get(calleeCid);
137
+ if (!newArrayExpr) {
138
+ let staticInvokeExpr = callstmt.getRightOp();
139
+ if (!(staticInvokeExpr instanceof Expr_1.ArkStaticInvokeExpr)) {
140
+ return;
141
+ }
142
+ if (((_a = staticInvokeExpr.getMethodSignature().getDeclaringClassSignature().getDeclaringNamespaceSignature()) === null || _a === void 0 ? void 0 : _a.getNamespaceName()) === 'collections') {
143
+ let realtypes = staticInvokeExpr.getRealGenericTypes();
144
+ if (realtypes !== undefined && realtypes.length > 0) {
145
+ // create new array with real type
146
+ newArrayExpr = new Expr_1.ArkNewArrayExpr(realtypes[0], staticInvokeExpr.getArg(0));
147
+ }
148
+ else {
149
+ // create new array with base type
150
+ newArrayExpr = new Expr_1.ArkNewArrayExpr(returnType.getBaseType(), staticInvokeExpr.getArg(0));
151
+ }
152
+ }
153
+ }
154
+ if (newArrayExpr === undefined) {
155
+ return;
156
+ }
157
+ arraycidMap.set(calleeCid, newArrayExpr);
158
+ this.sdkMethodReturnArrayMap.set(calleeMethod, arraycidMap);
159
+ let srcPagNode = this.pagBuilder.getOrNewPagNode(calleeCid, newArrayExpr);
160
+ let dstPagNode = this.pagBuilder.getOrNewPagNode(callerCid, callstmt.getLeftOp(), cs.callStmt);
161
+ this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Address, cs.callStmt);
162
+ srcNodes.push(srcPagNode.getID());
163
+ return;
164
+ }
165
+ addSDKMethodReturnUnionPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes) {
166
+ let returnType = calleeMethod.getReturnType();
167
+ let callstmt = cs.callStmt;
168
+ let cidMap = this.sdkMethodReturnValueMap.get(calleeMethod);
169
+ if (!cidMap) {
170
+ cidMap = new Map();
171
+ }
172
+ let newExpr = cidMap.get(calleeCid);
173
+ if (!newExpr) {
174
+ let types = returnType.getTypes();
175
+ for (let uniontype of types) {
176
+ if (uniontype instanceof Type_1.AliasType && uniontype.getOriginalType() instanceof Type_1.ClassType) {
177
+ let classtype = uniontype.getOriginalType();
178
+ newExpr = new Expr_1.ArkNewExpr(classtype);
179
+ }
180
+ if (uniontype instanceof Type_1.ClassType) {
181
+ newExpr = new Expr_1.ArkNewExpr(uniontype);
182
+ }
183
+ }
184
+ }
185
+ if (newExpr === undefined) {
186
+ return;
187
+ }
188
+ cidMap.set(calleeCid, newExpr);
189
+ this.sdkMethodReturnValueMap.set(calleeMethod, cidMap);
190
+ let srcPagNode = this.pagBuilder.getOrNewPagNode(calleeCid, newExpr);
191
+ let dstPagNode = this.pagBuilder.getOrNewPagNode(callerCid, callstmt.getLeftOp(), cs.callStmt);
192
+ this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Address, cs.callStmt);
193
+ srcNodes.push(srcPagNode.getID());
194
+ return;
195
+ }
196
+ addSDKMethodReturnGenericPagEdge(cs, callerCid, calleeCid, calleeMethod, srcNodes) {
197
+ if (calleeMethod.getName() === Const_1.MAKEOBSERVED) {
198
+ let callstmt = cs.callStmt;
199
+ let cidMap = this.sdkMethodReturnValueMap.get(calleeMethod);
200
+ if (!cidMap) {
201
+ cidMap = new Map();
202
+ }
203
+ let newExpr = cidMap.get(calleeCid);
204
+ if (!newExpr && cs.args !== undefined && cs.args.length > 0) {
205
+ let type = cs.args[0].getType();
206
+ if (type instanceof Type_1.ClassType) {
207
+ newExpr = new Expr_1.ArkNewExpr(type);
208
+ }
209
+ }
210
+ if (newExpr === undefined) {
211
+ return;
212
+ }
213
+ cidMap.set(calleeCid, newExpr);
214
+ this.sdkMethodReturnValueMap.set(calleeMethod, cidMap);
215
+ let srcPagNode = this.pagBuilder.getOrNewPagNode(calleeCid, newExpr);
216
+ let dstPagNode = this.pagBuilder.getOrNewPagNode(callerCid, callstmt.getLeftOp(), cs.callStmt);
217
+ this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Address, cs.callStmt);
218
+ srcNodes.push(srcPagNode.getID());
219
+ return;
220
+ }
221
+ }
108
222
  /**
109
223
  * process the anonymous method param, create a new CallSite for it and invoke it.
110
224
  */
@@ -20,4 +20,5 @@ export declare const UNKNOWN_METHOD_NAME = "";
20
20
  export declare const TEMP_LOCAL_PREFIX = "%";
21
21
  export declare const LEXICAL_ENV_NAME_PREFIX: string;
22
22
  export declare const ARKTS_STATIC_MARK = "use static";
23
+ export declare const MAKEOBSERVED = "makeObserved";
23
24
  //# sourceMappingURL=Const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Const.d.ts","sourceRoot":"","sources":["../../../src/core/common/Const.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,YAAY,QAAQ,CAAC;AAClC,eAAO,MAAM,YAAY,SAAS,CAAC;AAGnC,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AACjE,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AACzD,eAAO,MAAM,yBAAyB,MAAiB,CAAC;AAGxD,eAAO,MAAM,uBAAuB,QAA6B,CAAC;AAClE,eAAO,MAAM,yBAAyB,QAA2B,CAAC;AAClE,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAChE,eAAO,MAAM,+BAA+B,QAA4B,CAAC;AACzE,eAAO,MAAM,uBAAuB,QAAqB,CAAC;AAC1D,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,eAAO,MAAM,oBAAoB,QAA6B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AACjE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,iBAAiB,MAAc,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,iBAAiB,eAAe,CAAC"}
1
+ {"version":3,"file":"Const.d.ts","sourceRoot":"","sources":["../../../src/core/common/Const.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,YAAY,QAAQ,CAAC;AAClC,eAAO,MAAM,YAAY,SAAS,CAAC;AAGnC,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AACjE,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AACzD,eAAO,MAAM,yBAAyB,MAAiB,CAAC;AAGxD,eAAO,MAAM,uBAAuB,QAA6B,CAAC;AAClE,eAAO,MAAM,yBAAyB,QAA2B,CAAC;AAClE,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAChE,eAAO,MAAM,+BAA+B,QAA4B,CAAC;AACzE,eAAO,MAAM,uBAAuB,QAAqB,CAAC;AAC1D,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAG5C,eAAO,MAAM,oBAAoB,QAA6B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,sBAAsB,QAA6B,CAAC;AACjE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,iBAAiB,MAAc,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAG9C,eAAO,MAAM,YAAY,iBAAiB,CAAC"}
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ARKTS_STATIC_MARK = exports.LEXICAL_ENV_NAME_PREFIX = exports.TEMP_LOCAL_PREFIX = exports.UNKNOWN_METHOD_NAME = exports.UNKNOWN_FIELD_NAME = exports.UNKNOWN_CLASS_NAME = exports.UNKNOWN_NAMESPACE_NAME = exports.UNKNOWN_FILE_NAME = exports.UNKNOWN_PROJECT_NAME = exports.CALL_SIGNATURE_NAME = exports.ANONYMOUS_METHOD_PREFIX = exports.STATIC_BLOCK_METHOD_NAME_PREFIX = exports.STATIC_INIT_METHOD_NAME = exports.INSTANCE_INIT_METHOD_NAME = exports.DEFAULT_ARK_METHOD_NAME = exports.ANONYMOUS_CLASS_DELIMITER = exports.ANONYMOUS_CLASS_PREFIX = exports.DEFAULT_ARK_CLASS_NAME = exports.DEFAULT_NAME = exports.UNKNOWN_NAME = exports.NAME_PREFIX = exports.NAME_DELIMITER = void 0;
17
+ exports.MAKEOBSERVED = exports.ARKTS_STATIC_MARK = exports.LEXICAL_ENV_NAME_PREFIX = exports.TEMP_LOCAL_PREFIX = exports.UNKNOWN_METHOD_NAME = exports.UNKNOWN_FIELD_NAME = exports.UNKNOWN_CLASS_NAME = exports.UNKNOWN_NAMESPACE_NAME = exports.UNKNOWN_FILE_NAME = exports.UNKNOWN_PROJECT_NAME = exports.CALL_SIGNATURE_NAME = exports.ANONYMOUS_METHOD_PREFIX = exports.STATIC_BLOCK_METHOD_NAME_PREFIX = exports.STATIC_INIT_METHOD_NAME = exports.INSTANCE_INIT_METHOD_NAME = exports.DEFAULT_ARK_METHOD_NAME = exports.ANONYMOUS_CLASS_DELIMITER = exports.ANONYMOUS_CLASS_PREFIX = exports.DEFAULT_ARK_CLASS_NAME = exports.DEFAULT_NAME = exports.UNKNOWN_NAME = exports.NAME_PREFIX = exports.NAME_DELIMITER = void 0;
18
18
  // names
19
19
  exports.NAME_DELIMITER = '$';
20
20
  exports.NAME_PREFIX = '%';
@@ -43,3 +43,5 @@ exports.TEMP_LOCAL_PREFIX = exports.NAME_PREFIX;
43
43
  exports.LEXICAL_ENV_NAME_PREFIX = exports.TEMP_LOCAL_PREFIX + 'closures';
44
44
  // ArkTS version
45
45
  exports.ARKTS_STATIC_MARK = 'use static';
46
+ // Concurrent const
47
+ exports.MAKEOBSERVED = 'makeObserved';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arkanalyzer",
3
- "version": "1.0.68",
4
- "commit_id": "d2543c9c",
3
+ "version": "1.0.69",
4
+ "commit_id": "34dca3b7",
5
5
  "files": [
6
6
  "docs",
7
7
  "lib",