svf-tools 1.0.892 → 1.0.894

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 (276) hide show
  1. package/SVF-doxygen/html/AbstractExecution_8cpp.html +3 -3
  2. package/SVF-doxygen/html/AbstractExecution_8cpp_source.html +1746 -1753
  3. package/SVF-doxygen/html/AbstractExecution_8h.html +0 -2
  4. package/SVF-doxygen/html/AbstractExecution_8h_source.html +284 -335
  5. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +773 -791
  6. package/SVF-doxygen/html/BufOverflowChecker_8h.html +0 -2
  7. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +48 -81
  8. package/SVF-doxygen/html/ae_8cpp.html +16 -19
  9. package/SVF-doxygen/html/ae_8cpp_source.html +16 -19
  10. package/SVF-doxygen/html/annotated.html +434 -436
  11. package/SVF-doxygen/html/classSVF_1_1AEStat.html +168 -168
  12. package/SVF-doxygen/html/classSVF_1_1AbstractExecution-members.html +49 -24
  13. package/SVF-doxygen/html/classSVF_1_1AbstractExecution.html +2533 -1041
  14. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +71 -41
  15. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +777 -63
  16. package/SVF-doxygen/html/classes.html +418 -421
  17. package/SVF-doxygen/html/functions.html +8 -12
  18. package/SVF-doxygen/html/functions_a.html +10 -11
  19. package/SVF-doxygen/html/functions_b.html +5 -9
  20. package/SVF-doxygen/html/functions_c.html +26 -28
  21. package/SVF-doxygen/html/functions_d.html +2 -2
  22. package/SVF-doxygen/html/functions_e.html +2 -2
  23. package/SVF-doxygen/html/functions_enum.html +1 -1
  24. package/SVF-doxygen/html/functions_eval_m.html +2 -2
  25. package/SVF-doxygen/html/functions_eval_s.html +2 -2
  26. package/SVF-doxygen/html/functions_eval_u.html +1 -1
  27. package/SVF-doxygen/html/functions_func.html +9 -12
  28. package/SVF-doxygen/html/functions_func_b.html +2 -5
  29. package/SVF-doxygen/html/functions_func_c.html +25 -27
  30. package/SVF-doxygen/html/functions_func_d.html +2 -2
  31. package/SVF-doxygen/html/functions_func_g.html +15 -16
  32. package/SVF-doxygen/html/functions_func_h.html +6 -6
  33. package/SVF-doxygen/html/functions_func_i.html +9 -13
  34. package/SVF-doxygen/html/functions_func_p.html +1 -1
  35. package/SVF-doxygen/html/functions_func_s.html +19 -20
  36. package/SVF-doxygen/html/functions_func_t.html +1 -1
  37. package/SVF-doxygen/html/functions_func_~.html +0 -3
  38. package/SVF-doxygen/html/functions_g.html +21 -22
  39. package/SVF-doxygen/html/functions_h.html +6 -6
  40. package/SVF-doxygen/html/functions_i.html +15 -19
  41. package/SVF-doxygen/html/functions_l.html +5 -5
  42. package/SVF-doxygen/html/functions_m.html +2 -2
  43. package/SVF-doxygen/html/functions_o.html +15 -15
  44. package/SVF-doxygen/html/functions_p.html +13 -13
  45. package/SVF-doxygen/html/functions_r.html +4 -2
  46. package/SVF-doxygen/html/functions_s.html +21 -22
  47. package/SVF-doxygen/html/functions_t.html +5 -5
  48. package/SVF-doxygen/html/functions_type_c.html +1 -1
  49. package/SVF-doxygen/html/functions_u.html +1 -1
  50. package/SVF-doxygen/html/functions_vars.html +8 -12
  51. package/SVF-doxygen/html/functions_vars_b.html +0 -3
  52. package/SVF-doxygen/html/functions_w.html +7 -13
  53. package/SVF-doxygen/html/functions_~.html +0 -3
  54. package/SVF-doxygen/html/hierarchy.html +629 -631
  55. package/SVF-doxygen/html/namespaceSVF.html +5 -9
  56. package/SVF-doxygen/html/search/all_0.js +11 -11
  57. package/SVF-doxygen/html/search/all_1.js +5 -5
  58. package/SVF-doxygen/html/search/all_10.js +325 -325
  59. package/SVF-doxygen/html/search/all_11.js +226 -226
  60. package/SVF-doxygen/html/search/all_12.js +570 -570
  61. package/SVF-doxygen/html/search/all_13.js +207 -207
  62. package/SVF-doxygen/html/search/all_14.js +70 -70
  63. package/SVF-doxygen/html/search/all_15.js +176 -176
  64. package/SVF-doxygen/html/search/all_16.js +77 -77
  65. package/SVF-doxygen/html/search/all_17.js +1 -1
  66. package/SVF-doxygen/html/search/all_18.js +1 -1
  67. package/SVF-doxygen/html/search/all_19.js +26 -26
  68. package/SVF-doxygen/html/search/all_1a.js +179 -180
  69. package/SVF-doxygen/html/search/all_2.js +65 -66
  70. package/SVF-doxygen/html/search/all_3.js +640 -640
  71. package/SVF-doxygen/html/search/all_4.js +235 -235
  72. package/SVF-doxygen/html/search/all_5.js +126 -126
  73. package/SVF-doxygen/html/search/all_6.js +232 -232
  74. package/SVF-doxygen/html/search/all_7.js +1047 -1047
  75. package/SVF-doxygen/html/search/all_8.js +215 -215
  76. package/SVF-doxygen/html/search/all_9.js +629 -630
  77. package/SVF-doxygen/html/search/all_a.js +46 -46
  78. package/SVF-doxygen/html/search/all_b.js +26 -26
  79. package/SVF-doxygen/html/search/all_c.js +115 -115
  80. package/SVF-doxygen/html/search/all_d.js +204 -204
  81. package/SVF-doxygen/html/search/all_e.js +209 -209
  82. package/SVF-doxygen/html/search/all_f.js +122 -122
  83. package/SVF-doxygen/html/search/classes_0.js +28 -29
  84. package/SVF-doxygen/html/search/classes_1.js +11 -12
  85. package/SVF-doxygen/html/search/classes_10.js +74 -74
  86. package/SVF-doxygen/html/search/classes_11.js +14 -14
  87. package/SVF-doxygen/html/search/classes_12.js +2 -2
  88. package/SVF-doxygen/html/search/classes_13.js +10 -10
  89. package/SVF-doxygen/html/search/classes_14.js +19 -19
  90. package/SVF-doxygen/html/search/classes_15.js +1 -1
  91. package/SVF-doxygen/html/search/classes_2.js +73 -73
  92. package/SVF-doxygen/html/search/classes_3.js +35 -35
  93. package/SVF-doxygen/html/search/classes_4.js +8 -8
  94. package/SVF-doxygen/html/search/classes_5.js +28 -28
  95. package/SVF-doxygen/html/search/classes_6.js +98 -98
  96. package/SVF-doxygen/html/search/classes_7.js +38 -38
  97. package/SVF-doxygen/html/search/classes_8.js +59 -59
  98. package/SVF-doxygen/html/search/classes_9.js +1 -1
  99. package/SVF-doxygen/html/search/classes_a.js +12 -12
  100. package/SVF-doxygen/html/search/classes_b.js +29 -29
  101. package/SVF-doxygen/html/search/classes_c.js +6 -6
  102. package/SVF-doxygen/html/search/classes_d.js +19 -19
  103. package/SVF-doxygen/html/search/classes_e.js +36 -36
  104. package/SVF-doxygen/html/search/classes_f.js +25 -25
  105. package/SVF-doxygen/html/search/defines_0.js +3 -3
  106. package/SVF-doxygen/html/search/defines_1.js +3 -3
  107. package/SVF-doxygen/html/search/defines_10.js +2 -2
  108. package/SVF-doxygen/html/search/defines_2.js +30 -30
  109. package/SVF-doxygen/html/search/defines_3.js +20 -20
  110. package/SVF-doxygen/html/search/defines_4.js +3 -3
  111. package/SVF-doxygen/html/search/defines_5.js +4 -4
  112. package/SVF-doxygen/html/search/defines_6.js +2 -2
  113. package/SVF-doxygen/html/search/defines_7.js +5 -5
  114. package/SVF-doxygen/html/search/defines_8.js +11 -11
  115. package/SVF-doxygen/html/search/defines_9.js +9 -9
  116. package/SVF-doxygen/html/search/defines_a.js +2 -2
  117. package/SVF-doxygen/html/search/defines_b.js +1 -1
  118. package/SVF-doxygen/html/search/defines_c.js +4 -4
  119. package/SVF-doxygen/html/search/defines_d.js +2 -2
  120. package/SVF-doxygen/html/search/defines_e.js +8 -8
  121. package/SVF-doxygen/html/search/defines_f.js +4 -4
  122. package/SVF-doxygen/html/search/enums_0.js +4 -4
  123. package/SVF-doxygen/html/search/enums_1.js +2 -2
  124. package/SVF-doxygen/html/search/enums_10.js +1 -1
  125. package/SVF-doxygen/html/search/enums_11.js +1 -1
  126. package/SVF-doxygen/html/search/enums_2.js +8 -8
  127. package/SVF-doxygen/html/search/enums_3.js +1 -1
  128. package/SVF-doxygen/html/search/enums_4.js +4 -4
  129. package/SVF-doxygen/html/search/enums_5.js +1 -1
  130. package/SVF-doxygen/html/search/enums_6.js +2 -2
  131. package/SVF-doxygen/html/search/enums_7.js +2 -2
  132. package/SVF-doxygen/html/search/enums_8.js +4 -4
  133. package/SVF-doxygen/html/search/enums_9.js +1 -1
  134. package/SVF-doxygen/html/search/enums_a.js +1 -1
  135. package/SVF-doxygen/html/search/enums_b.js +7 -7
  136. package/SVF-doxygen/html/search/enums_c.js +1 -1
  137. package/SVF-doxygen/html/search/enums_d.js +4 -4
  138. package/SVF-doxygen/html/search/enums_e.js +2 -2
  139. package/SVF-doxygen/html/search/enums_f.js +4 -4
  140. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  141. package/SVF-doxygen/html/search/enumvalues_1.js +15 -15
  142. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  143. package/SVF-doxygen/html/search/enumvalues_11.js +4 -4
  144. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  145. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  146. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  147. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  148. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  149. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  150. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  151. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  152. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  153. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  154. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  155. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  156. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  157. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  158. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  159. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  160. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  161. package/SVF-doxygen/html/search/enumvalues_f.js +47 -47
  162. package/SVF-doxygen/html/search/files_0.js +16 -16
  163. package/SVF-doxygen/html/search/files_1.js +9 -9
  164. package/SVF-doxygen/html/search/files_10.js +8 -8
  165. package/SVF-doxygen/html/search/files_11.js +8 -8
  166. package/SVF-doxygen/html/search/files_12.js +2 -2
  167. package/SVF-doxygen/html/search/files_2.js +53 -53
  168. package/SVF-doxygen/html/search/files_3.js +14 -14
  169. package/SVF-doxygen/html/search/files_4.js +5 -5
  170. package/SVF-doxygen/html/search/files_5.js +13 -13
  171. package/SVF-doxygen/html/search/files_6.js +10 -10
  172. package/SVF-doxygen/html/search/files_7.js +17 -17
  173. package/SVF-doxygen/html/search/files_8.js +13 -13
  174. package/SVF-doxygen/html/search/files_9.js +18 -18
  175. package/SVF-doxygen/html/search/files_a.js +3 -3
  176. package/SVF-doxygen/html/search/files_b.js +4 -4
  177. package/SVF-doxygen/html/search/files_c.js +20 -20
  178. package/SVF-doxygen/html/search/files_d.js +4 -4
  179. package/SVF-doxygen/html/search/files_e.js +62 -62
  180. package/SVF-doxygen/html/search/files_f.js +8 -8
  181. package/SVF-doxygen/html/search/functions_0.js +13 -13
  182. package/SVF-doxygen/html/search/functions_1.js +368 -369
  183. package/SVF-doxygen/html/search/functions_10.js +140 -140
  184. package/SVF-doxygen/html/search/functions_11.js +140 -140
  185. package/SVF-doxygen/html/search/functions_12.js +299 -299
  186. package/SVF-doxygen/html/search/functions_13.js +73 -73
  187. package/SVF-doxygen/html/search/functions_14.js +41 -41
  188. package/SVF-doxygen/html/search/functions_15.js +72 -72
  189. package/SVF-doxygen/html/search/functions_16.js +38 -38
  190. package/SVF-doxygen/html/search/functions_17.js +3 -3
  191. package/SVF-doxygen/html/search/functions_18.js +179 -180
  192. package/SVF-doxygen/html/search/functions_2.js +94 -95
  193. package/SVF-doxygen/html/search/functions_3.js +261 -261
  194. package/SVF-doxygen/html/search/functions_4.js +84 -84
  195. package/SVF-doxygen/html/search/functions_5.js +57 -57
  196. package/SVF-doxygen/html/search/functions_6.js +65 -65
  197. package/SVF-doxygen/html/search/functions_7.js +863 -863
  198. package/SVF-doxygen/html/search/functions_8.js +162 -162
  199. package/SVF-doxygen/html/search/functions_9.js +438 -439
  200. package/SVF-doxygen/html/search/functions_a.js +30 -30
  201. package/SVF-doxygen/html/search/functions_b.js +2 -2
  202. package/SVF-doxygen/html/search/functions_c.js +25 -25
  203. package/SVF-doxygen/html/search/functions_d.js +82 -82
  204. package/SVF-doxygen/html/search/functions_e.js +36 -36
  205. package/SVF-doxygen/html/search/functions_f.js +58 -58
  206. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  207. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  208. package/SVF-doxygen/html/search/related_0.js +4 -4
  209. package/SVF-doxygen/html/search/related_1.js +2 -2
  210. package/SVF-doxygen/html/search/related_2.js +2 -2
  211. package/SVF-doxygen/html/search/related_3.js +2 -2
  212. package/SVF-doxygen/html/search/related_4.js +2 -2
  213. package/SVF-doxygen/html/search/related_5.js +1 -1
  214. package/SVF-doxygen/html/search/related_6.js +2 -2
  215. package/SVF-doxygen/html/search/related_7.js +5 -5
  216. package/SVF-doxygen/html/search/related_8.js +2 -2
  217. package/SVF-doxygen/html/search/related_9.js +4 -4
  218. package/SVF-doxygen/html/search/related_a.js +19 -19
  219. package/SVF-doxygen/html/search/related_b.js +4 -4
  220. package/SVF-doxygen/html/search/related_c.js +2 -2
  221. package/SVF-doxygen/html/search/related_d.js +12 -12
  222. package/SVF-doxygen/html/search/related_e.js +2 -2
  223. package/SVF-doxygen/html/search/related_f.js +2 -2
  224. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  225. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  226. package/SVF-doxygen/html/search/typedefs_10.js +63 -63
  227. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  228. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  229. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  230. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  231. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  232. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  233. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  234. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  235. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  236. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  237. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  238. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  239. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  240. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  241. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  242. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  243. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  244. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  245. package/SVF-doxygen/html/search/variables_0.js +177 -177
  246. package/SVF-doxygen/html/search/variables_1.js +76 -76
  247. package/SVF-doxygen/html/search/variables_10.js +98 -98
  248. package/SVF-doxygen/html/search/variables_11.js +46 -46
  249. package/SVF-doxygen/html/search/variables_12.js +93 -93
  250. package/SVF-doxygen/html/search/variables_13.js +76 -76
  251. package/SVF-doxygen/html/search/variables_14.js +14 -14
  252. package/SVF-doxygen/html/search/variables_15.js +49 -49
  253. package/SVF-doxygen/html/search/variables_16.js +11 -11
  254. package/SVF-doxygen/html/search/variables_17.js +1 -1
  255. package/SVF-doxygen/html/search/variables_18.js +17 -17
  256. package/SVF-doxygen/html/search/variables_2.js +40 -41
  257. package/SVF-doxygen/html/search/variables_3.js +142 -142
  258. package/SVF-doxygen/html/search/variables_4.js +51 -51
  259. package/SVF-doxygen/html/search/variables_5.js +39 -39
  260. package/SVF-doxygen/html/search/variables_6.js +66 -66
  261. package/SVF-doxygen/html/search/variables_7.js +34 -34
  262. package/SVF-doxygen/html/search/variables_8.js +8 -8
  263. package/SVF-doxygen/html/search/variables_9.js +79 -79
  264. package/SVF-doxygen/html/search/variables_a.js +4 -4
  265. package/SVF-doxygen/html/search/variables_b.js +10 -10
  266. package/SVF-doxygen/html/search/variables_c.js +45 -45
  267. package/SVF-doxygen/html/search/variables_d.js +57 -57
  268. package/SVF-doxygen/html/search/variables_e.js +123 -123
  269. package/SVF-doxygen/html/search/variables_f.js +31 -31
  270. package/package.json +1 -1
  271. package/setup.sh +1 -1
  272. package/svf/include/AE/Svfexe/AbstractExecution.h +55 -102
  273. package/svf/include/AE/Svfexe/BufOverflowChecker.h +12 -33
  274. package/svf/lib/AE/Svfexe/AbstractExecution.cpp +59 -64
  275. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +44 -59
  276. package/svf-llvm/tools/AE/ae.cpp +1 -2
@@ -43,10 +43,6 @@ class ExeState;
43
43
 
44
44
  template<typename T> class FILOWorkList;
45
45
 
46
-
47
-
48
-
49
-
50
46
  enum class AEKind
51
47
  {
52
48
  AbstractExecution,
@@ -58,7 +54,7 @@ class AEStat : public SVFStat
58
54
  {
59
55
  public:
60
56
  void countStateSize();
61
- AEStat(AbstractExecution *ae): _ae(ae)
57
+ AEStat(AbstractExecution* ae) : _ae(ae)
62
58
  {
63
59
  startTime = getClk(true);
64
60
  }
@@ -76,7 +72,7 @@ public:
76
72
  void reportBug();
77
73
 
78
74
  public:
79
- AbstractExecution *_ae;
75
+ AbstractExecution* _ae;
80
76
  s32_t count{0};
81
77
  std::string memory_usage;
82
78
  std::string memUsage;
@@ -107,7 +103,6 @@ public:
107
103
  }
108
104
  return generalNumMap["ICFG_Node_Trace"];
109
105
  }
110
-
111
106
  };
112
107
 
113
108
  class AbstractExecution
@@ -116,12 +111,11 @@ class AbstractExecution
116
111
  friend class AEAPI;
117
112
 
118
113
  public:
119
- typedef SCCDetection<PTACallGraph *> CallGraphSCC;
114
+ enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
115
+ typedef SCCDetection<PTACallGraph*> CallGraphSCC;
120
116
  /// Constructor
121
117
  AbstractExecution();
122
118
 
123
- virtual void initExtAPI();
124
-
125
119
  virtual void runOnModule(ICFG* icfg);
126
120
 
127
121
  /// Destructor
@@ -153,7 +147,7 @@ protected:
153
147
  * @param node The ICFGNode to analyse
154
148
  * @return if this node has preceding execution state
155
149
  */
156
- bool hasInEdgesES(const ICFGNode *node);
150
+ bool hasInEdgesES(const ICFGNode* node);
157
151
 
158
152
  /**
159
153
  * Check if execution state exist at the branch edge
@@ -175,7 +169,7 @@ protected:
175
169
  *
176
170
  * @param node ICFGNode which has a single instruction
177
171
  */
178
- virtual void handleICFGNode(const ICFGNode *node);
172
+ virtual void handleICFGNode(const ICFGNode* node);
179
173
 
180
174
  /**
181
175
  * handle call node in ICFGNode
@@ -189,35 +183,35 @@ protected:
189
183
  *
190
184
  * @param cycle WTOCycle which has weak topo order of basic blocks and nested cycles
191
185
  */
192
- virtual void handleCycle(const ICFGWTOCycle *cycle);
186
+ virtual void handleCycle(const ICFGWTOCycle* cycle);
193
187
 
194
188
  /**
195
189
  * handle user defined function, ext function is not included.
196
190
  *
197
191
  * @param func SVFFunction which has a series of basic blocks
198
192
  */
199
- virtual void handleFunc(const SVFFunction *func);
193
+ virtual void handleFunc(const SVFFunction* func);
200
194
 
201
195
  /**
202
196
  * handle SVF Statement like CmpStmt, CallStmt, GepStmt, LoadStmt, StoreStmt, etc.
203
197
  *
204
198
  * @param stmt SVFStatement which is a value flow of instruction
205
199
  */
206
- virtual void handleSVFStatement(const SVFStmt *stmt);
200
+ virtual void handleSVFStatement(const SVFStmt* stmt);
207
201
 
208
202
  /**
209
203
  * Check if this callnode is recursive call and skip it.
210
204
  *
211
205
  * @param callnode CallICFGNode which calls a recursive function
212
206
  */
213
- virtual void SkipRecursiveCall(const CallICFGNode *callnode);
207
+ virtual void SkipRecursiveCall(const CallICFGNode* callnode);
214
208
 
215
209
  /**
216
210
  * Check if this function is recursive function and skip it.
217
211
  *
218
212
  * @param func SVFFunction is a recursive function
219
- */
220
- virtual void SkipRecursiveFunc(const SVFFunction *func);
213
+ */
214
+ virtual void SkipRecursiveFunc(const SVFFunction* func);
221
215
 
222
216
  /**
223
217
  * Check if this cmpStmt and succ are satisfiable to the execution state.
@@ -237,84 +231,6 @@ protected:
237
231
  */
238
232
  bool hasSwitchBranchES(const SVFVar* var, s64_t succ, IntervalExeState& es);
239
233
 
240
- /// protected data members, also used in subclasses
241
- SVFIR* _svfir;
242
- PTACallGraph* _callgraph;
243
- /// Execution State, used to store the Interval Value of every SVF variable
244
- SVFIR2ItvExeState* _svfir2ExeState;
245
- AEAPI* _api{nullptr};
246
-
247
- ICFG* _icfg;
248
- AEStat* _stat;
249
- AEKind _kind;
250
-
251
- Set<std::string> _bugLoc;
252
- SVFBugReport _recoder;
253
- std::vector<const CallICFGNode*> _callSiteStack;
254
- Map<const ICFGNode *, std::string> _nodeToBugInfo;
255
- AndersenWaveDiff *_ander;
256
- Map<const SVFFunction*, ICFGWTO *> _funcToWTO;
257
- Set<const SVFFunction*> _recursiveFuns;
258
-
259
- private:
260
- // helper functions in handleCallSite
261
- virtual bool isExtCall(const CallICFGNode* callNode);
262
- virtual void extCallPass(const CallICFGNode* callNode);
263
- virtual bool isRecursiveCall(const CallICFGNode* callNode);
264
- virtual void recursiveCallPass(const CallICFGNode* callNode);
265
- virtual bool isDirectCall(const CallICFGNode* callNode);
266
- virtual void directCallFunPass(const CallICFGNode* callNode);
267
- virtual bool isIndirectCall(const CallICFGNode* callNode);
268
- virtual void indirectCallFunPass(const CallICFGNode* callNode);
269
-
270
- // helper functions in hasInEdgesES
271
- bool isFunEntry(const ICFGNode* node);
272
- bool isGlobalEntry(const ICFGNode* node);
273
-
274
- // helper functions in handleCycle
275
- bool widenFixpointPass(const ICFGNode* cycle_head, IntervalExeState& pre_es);
276
- bool narrowFixpointPass(const ICFGNode* cycle_head, IntervalExeState& pre_es);
277
-
278
- // private data
279
- Map<const ICFGNode*, IntervalExeState> _preES;
280
- Map<const ICFGNode*, IntervalExeState> _postES;
281
- std::string _moduleName;
282
-
283
-
284
- };
285
-
286
- class AEAPI
287
- {
288
- public:
289
- enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
290
- static bool classof(const AEAPI* api)
291
- {
292
- return api->getKind() == AEKind::AbstractExecution;
293
- }
294
-
295
- /**
296
- * Constructor of AEAPI
297
- *
298
- * @param ae Abstract Execution or its subclass
299
- * @param stat AEStat
300
- */
301
- AEAPI(AbstractExecution* ae, AEStat* stat): _ae(ae), _stat(stat)
302
- {
303
- initExtFunMap();
304
- _kind = AEKind::AbstractExecution;
305
- }
306
-
307
- virtual ~AEAPI() {}
308
-
309
- void setModule(SVFIR* svfModule)
310
- {
311
- _svfir = svfModule;
312
- }
313
-
314
- AEKind getKind() const
315
- {
316
- return _kind;
317
- }
318
234
 
319
235
  /**
320
236
  * handle external function call
@@ -414,8 +330,6 @@ public:
414
330
 
415
331
  void collectCheckPoint();
416
332
  void checkPointAllSet();
417
-
418
- protected:
419
333
  // helper functions for traceMemoryAllocationSize and canSafelyAccessMemory
420
334
  void AccessMemoryViaRetNode(const CallICFGNode *callnode, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
421
335
  void AccessMemoryViaCopyStmt(const CopyStmt *copy, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
@@ -423,16 +337,55 @@ protected:
423
337
  void AccessMemoryViaCallArgs(const SVF::SVFArgument *arg, SVF::FILOWorkList<const SVFValue *>& worklist, Set<const SVFValue *>& visited);
424
338
 
425
339
 
426
- protected:
427
- AbstractExecution* _ae;
428
- AEStat* _stat;
340
+ /// protected data members, also used in subclasses
429
341
  SVFIR* _svfir;
342
+ PTACallGraph* _callgraph;
343
+ /// Execution State, used to store the Interval Value of every SVF variable
344
+ SVFIR2ItvExeState* _svfir2ExeState;
345
+ AEAPI* _api{nullptr};
346
+
347
+ ICFG* _icfg;
348
+ AEStat* _stat;
430
349
  AEKind _kind;
431
350
 
432
- Map<std::string, std::function<void(const CallSite &)>> _func_map;
351
+ Set<std::string> _bugLoc;
352
+ SVFBugReport _recoder;
353
+ std::vector<const CallICFGNode*> _callSiteStack;
354
+ Map<const ICFGNode*, std::string> _nodeToBugInfo;
355
+ AndersenWaveDiff* _ander;
356
+ Map<const SVFFunction*, ICFGWTO*> _funcToWTO;
357
+ Set<const SVFFunction*> _recursiveFuns;
433
358
 
359
+ private:
360
+ // helper functions in handleCallSite
361
+ virtual bool isExtCall(const CallICFGNode* callNode);
362
+ virtual void extCallPass(const CallICFGNode* callNode);
363
+ virtual bool isRecursiveCall(const CallICFGNode* callNode);
364
+ virtual void recursiveCallPass(const CallICFGNode* callNode);
365
+ virtual bool isDirectCall(const CallICFGNode* callNode);
366
+ virtual void directCallFunPass(const CallICFGNode* callNode);
367
+ virtual bool isIndirectCall(const CallICFGNode* callNode);
368
+ virtual void indirectCallFunPass(const CallICFGNode* callNode);
369
+
370
+ // helper functions in hasInEdgesES
371
+ bool isFunEntry(const ICFGNode* node);
372
+ bool isGlobalEntry(const ICFGNode* node);
373
+
374
+ // helper functions in handleCycle
375
+ bool widenFixpointPass(const ICFGNode* cycle_head,
376
+ IntervalExeState& pre_es);
377
+ bool narrowFixpointPass(const ICFGNode* cycle_head,
378
+ IntervalExeState& pre_es);
379
+
380
+ protected:
381
+ // there data should be shared with subclasses
382
+ Map<std::string, std::function<void(const CallSite &)>> _func_map;
434
383
  Set<const CallICFGNode*> _checkpoints;
435
384
  Set<std::string> _checkpoint_names;
436
385
 
386
+ private:
387
+ Map<const ICFGNode*, IntervalExeState> _preES;
388
+ Map<const ICFGNode*, IntervalExeState> _postES;
389
+ std::string _moduleName;
437
390
  };
438
391
  }
@@ -100,27 +100,28 @@ protected:
100
100
  const SVFValue* _allocVar;
101
101
  };
102
102
 
103
- class BufOverflowCheckerAPI: public AEAPI
103
+ class BufOverflowChecker: public AbstractExecution
104
104
  {
105
105
  public:
106
- BufOverflowCheckerAPI() = delete;
107
- BufOverflowCheckerAPI(AbstractExecution * ae, AEStat * stat): AEAPI(ae, stat)
106
+ BufOverflowChecker() : AbstractExecution()
108
107
  {
109
108
  initExtFunMap();
110
- initExtAPIBufOverflowCheckRules();
111
109
  _kind = AEKind::BufOverflowChecker;
110
+ initExtAPIBufOverflowCheckRules();
112
111
  }
113
- static bool classof(const AEAPI* api)
112
+
113
+ static bool classof(const AbstractExecution* ae)
114
114
  {
115
- return api->getKind() == AEKind::BufOverflowChecker;
115
+ return ae->getKind() == AEKind::BufOverflowChecker;
116
116
  }
117
117
 
118
+ protected:
118
119
  /**
119
120
  * the map of external function to its API type
120
121
  *
121
122
  * it initialize the ext apis about buffer overflow checking
122
123
  */
123
- virtual void initExtFunMap();
124
+ virtual void initExtFunMap() override;
124
125
 
125
126
  /**
126
127
  * the map of ext apis of buffer overflow checking rules
@@ -136,7 +137,7 @@ public:
136
137
  *
137
138
  * @param call call node whose callee is external function
138
139
  */
139
- void handleExtAPI(const CallICFGNode *call) ;
140
+ void handleExtAPI(const CallICFGNode *call) override;
140
141
  /**
141
142
  * detect buffer overflow from strcpy like apis
142
143
  * e.g. strcpy(dst, src), if dst is shorter than src, we will throw buffer overflow
@@ -165,31 +166,6 @@ public:
165
166
  */
166
167
  bool canSafelyAccessMemory(const SVFValue *value, const IntervalValue &len, const ICFGNode *curNode);
167
168
 
168
-
169
- Map<NodeID, const GepStmt*> _addrToGep;
170
- Map<std::string, std::vector<std::pair<u32_t, u32_t>>> _extAPIBufOverflowCheckRules;
171
- };
172
-
173
- class BufOverflowChecker: public AbstractExecution
174
- {
175
- friend BufOverflowCheckerAPI;
176
-
177
- public:
178
- BufOverflowChecker() : AbstractExecution()
179
- {
180
- _kind = AEKind::BufOverflowChecker;
181
- }
182
-
183
- static bool classof(const AbstractExecution* ae)
184
- {
185
- return ae->getKind() == AEKind::BufOverflowChecker;
186
- }
187
-
188
- void initExtAPI() override
189
- {
190
- _api = new BufOverflowCheckerAPI(this, _stat);
191
- }
192
-
193
169
  private:
194
170
  /**
195
171
  * handle SVF statement regarding buffer overflow checking
@@ -221,6 +197,9 @@ private:
221
197
  */
222
198
  void addBugToRecoder(const BufOverflowException& e, const ICFGNode* node);
223
199
 
200
+ private:
201
+ Map<NodeID, const GepStmt*> _addrToGep;
202
+ Map<std::string, std::vector<std::pair<u32_t, u32_t>>> _extAPIBufOverflowCheckRules;
224
203
 
225
204
  };
226
205
  }