svf-tools 1.0.905 → 1.0.907

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 (438) hide show
  1. package/SVF-doxygen/html/AbstractInterpretation_8cpp.html +217 -0
  2. package/SVF-doxygen/html/AbstractInterpretation_8cpp_source.html +2093 -0
  3. package/SVF-doxygen/html/AbstractInterpretation_8h.html +115 -0
  4. package/SVF-doxygen/html/AbstractInterpretation_8h_source.html +459 -0
  5. package/SVF-doxygen/html/AbstractState_8cpp.html +84 -0
  6. package/SVF-doxygen/html/AbstractState_8cpp_source.html +461 -0
  7. package/SVF-doxygen/html/AbstractState_8h.html +105 -0
  8. package/SVF-doxygen/html/AbstractState_8h_source.html +891 -0
  9. package/SVF-doxygen/html/AbstractValue_8h.html +3 -3
  10. package/SVF-doxygen/html/AbstractValue_8h_source.html +652 -62
  11. package/SVF-doxygen/html/AddressValue_8h.html +4 -4
  12. package/SVF-doxygen/html/AddressValue_8h_source.html +180 -177
  13. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +782 -776
  14. package/SVF-doxygen/html/BufOverflowChecker_8h.html +1 -1
  15. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +19 -19
  16. package/SVF-doxygen/html/CFLGraph_8h_source.html +3 -3
  17. package/SVF-doxygen/html/CSC_8h_source.html +1 -1
  18. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/ConsExeState_8h_source.html +2 -2
  20. package/SVF-doxygen/html/ExeState_8cpp.html +1 -1
  21. package/SVF-doxygen/html/ExeState_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/ExeState_8h_source.html +8 -8
  23. package/SVF-doxygen/html/ICFGSimplification_8h.html +2 -2
  24. package/SVF-doxygen/html/ICFGSimplification_8h_source.html +17 -18
  25. package/SVF-doxygen/html/ICFG_8h_source.html +1 -1
  26. package/SVF-doxygen/html/IntervalValue_8h.html +2 -2
  27. package/SVF-doxygen/html/IntervalValue_8h_source.html +846 -864
  28. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +1 -1
  30. package/SVF-doxygen/html/MemRegion_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/PointsTo_8cpp_source.html +3 -3
  33. package/SVF-doxygen/html/PointsTo_8h_source.html +3 -3
  34. package/SVF-doxygen/html/RelExeState_8h_source.html +5 -5
  35. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +67 -68
  36. package/SVF-doxygen/html/RelationSolver_8h.html +1 -1
  37. package/SVF-doxygen/html/RelationSolver_8h_source.html +17 -17
  38. package/SVF-doxygen/html/SVFIR2AbsState_8cpp.html +84 -0
  39. package/SVF-doxygen/html/SVFIR2AbsState_8cpp_source.html +1348 -0
  40. package/SVF-doxygen/html/SVFIR2AbsState_8h.html +100 -0
  41. package/SVF-doxygen/html/SVFIR2AbsState_8h_source.html +378 -0
  42. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +9 -8
  43. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +920 -952
  44. package/SVF-doxygen/html/SVFIR2ItvExeState_8h.html +2 -3
  45. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +202 -207
  46. package/SVF-doxygen/html/SVFIR2Relation_8cpp.html +1 -1
  47. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +76 -72
  48. package/SVF-doxygen/html/SVFType_8cpp_source.html +1 -1
  49. package/SVF-doxygen/html/SVFType_8h_source.html +1 -1
  50. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  51. package/SVF-doxygen/html/SparseBitVector_8h_source.html +3 -3
  52. package/SVF-doxygen/html/WorkList_8h_source.html +1 -1
  53. package/SVF-doxygen/html/ae_8cpp.html +57 -57
  54. package/SVF-doxygen/html/ae_8cpp_source.html +462 -466
  55. package/SVF-doxygen/html/annotated.html +409 -418
  56. package/SVF-doxygen/html/classSVF_1_1AEStat-members.html +2 -2
  57. package/SVF-doxygen/html/classSVF_1_1AEStat.html +184 -190
  58. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation-members.html +161 -0
  59. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.html +4325 -0
  60. package/SVF-doxygen/html/classSVF_1_1AbstractInterpretation.png +0 -0
  61. package/SVF-doxygen/html/classSVF_1_1AbstractState-members.html +134 -0
  62. package/SVF-doxygen/html/classSVF_1_1AbstractState.html +2166 -0
  63. package/SVF-doxygen/html/classSVF_1_1AbstractState.png +0 -0
  64. package/SVF-doxygen/html/classSVF_1_1AddressValue-members.html +15 -28
  65. package/SVF-doxygen/html/classSVF_1_1AddressValue.html +171 -230
  66. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +0 -1
  67. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.png +0 -0
  68. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +73 -73
  69. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +578 -574
  70. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.png +0 -0
  71. package/SVF-doxygen/html/classSVF_1_1CFLNode-members.html +48 -49
  72. package/SVF-doxygen/html/classSVF_1_1CFLNode.html +25 -25
  73. package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +1 -1
  74. package/SVF-doxygen/html/classSVF_1_1ExeState.html +12 -14
  75. package/SVF-doxygen/html/classSVF_1_1ExeState.png +0 -0
  76. package/SVF-doxygen/html/classSVF_1_1FILOWorkList.html +3 -3
  77. package/SVF-doxygen/html/classSVF_1_1GenericNode.html +22 -8
  78. package/SVF-doxygen/html/classSVF_1_1GenericNode.png +0 -0
  79. package/SVF-doxygen/html/classSVF_1_1ICFGSimplification.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1IntervalValue-members.html +50 -64
  81. package/SVF-doxygen/html/classSVF_1_1IntervalValue.html +349 -459
  82. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +1 -1
  83. package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +1 -1
  84. package/SVF-doxygen/html/classSVF_1_1RelExeState-members.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1RelExeState.html +8 -8
  86. package/SVF-doxygen/html/classSVF_1_1RelationSolver-members.html +8 -8
  87. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +106 -107
  88. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState-members.html +141 -0
  89. package/SVF-doxygen/html/classSVF_1_1SVFIR2AbsState.html +3137 -0
  90. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +5 -5
  91. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +56 -57
  92. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1128 -1178
  93. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState-members.html +157 -0
  95. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState.html +1512 -0
  96. package/SVF-doxygen/html/classSVF_1_1SparseAbstractState.png +0 -0
  97. package/SVF-doxygen/html/classSVF_1_1Z3Expr.html +0 -1
  98. package/SVF-doxygen/html/classSVF_1_1Z3Expr.png +0 -0
  99. package/SVF-doxygen/html/classSymblicAbstractionTest-members.html +3 -3
  100. package/SVF-doxygen/html/classSymblicAbstractionTest.html +400 -404
  101. package/SVF-doxygen/html/classes.html +326 -336
  102. package/SVF-doxygen/html/dir_2c6fb801affc4b3efe6e1ed5974683f6.html +2 -10
  103. package/SVF-doxygen/html/dir_81caa96ab1d3de93b353e2bbe80e6067.html +2 -4
  104. package/SVF-doxygen/html/dir_9a8e7a56f4029a0d9f62b1c6d1f6e85b.html +2 -8
  105. package/SVF-doxygen/html/dir_fbec400583b4bd6c5f2e89c86c5943a6.html +2 -4
  106. package/SVF-doxygen/html/fastcluster__dm_8cpp_8inc_source.html +1 -1
  107. package/SVF-doxygen/html/files.html +18 -27
  108. package/SVF-doxygen/html/functions.html +33 -56
  109. package/SVF-doxygen/html/functions_a.html +29 -42
  110. package/SVF-doxygen/html/functions_b.html +14 -21
  111. package/SVF-doxygen/html/functions_c.html +42 -52
  112. package/SVF-doxygen/html/functions_d.html +7 -4
  113. package/SVF-doxygen/html/functions_e.html +7 -21
  114. package/SVF-doxygen/html/functions_enum.html +4 -7
  115. package/SVF-doxygen/html/functions_eval.html +2 -2
  116. package/SVF-doxygen/html/functions_eval_c.html +0 -3
  117. package/SVF-doxygen/html/functions_eval_i.html +2 -3
  118. package/SVF-doxygen/html/functions_eval_m.html +2 -2
  119. package/SVF-doxygen/html/functions_eval_s.html +2 -5
  120. package/SVF-doxygen/html/functions_eval_u.html +4 -1
  121. package/SVF-doxygen/html/functions_f.html +6 -6
  122. package/SVF-doxygen/html/functions_func.html +24 -31
  123. package/SVF-doxygen/html/functions_func_b.html +10 -16
  124. package/SVF-doxygen/html/functions_func_c.html +30 -39
  125. package/SVF-doxygen/html/functions_func_d.html +1 -1
  126. package/SVF-doxygen/html/functions_func_e.html +7 -17
  127. package/SVF-doxygen/html/functions_func_g.html +61 -115
  128. package/SVF-doxygen/html/functions_func_h.html +22 -24
  129. package/SVF-doxygen/html/functions_func_i.html +64 -94
  130. package/SVF-doxygen/html/functions_func_j.html +4 -6
  131. package/SVF-doxygen/html/functions_func_l.html +9 -23
  132. package/SVF-doxygen/html/functions_func_m.html +7 -8
  133. package/SVF-doxygen/html/functions_func_n.html +8 -13
  134. package/SVF-doxygen/html/functions_func_o.html +57 -48
  135. package/SVF-doxygen/html/functions_func_p.html +6 -11
  136. package/SVF-doxygen/html/functions_func_r.html +4 -4
  137. package/SVF-doxygen/html/functions_func_s.html +35 -50
  138. package/SVF-doxygen/html/functions_func_t.html +26 -40
  139. package/SVF-doxygen/html/functions_func_u.html +6 -5
  140. package/SVF-doxygen/html/functions_func_v.html +2 -9
  141. package/SVF-doxygen/html/functions_func_w.html +9 -8
  142. package/SVF-doxygen/html/functions_func_z.html +1 -2
  143. package/SVF-doxygen/html/functions_func_~.html +10 -22
  144. package/SVF-doxygen/html/functions_g.html +61 -118
  145. package/SVF-doxygen/html/functions_h.html +21 -23
  146. package/SVF-doxygen/html/functions_i.html +76 -106
  147. package/SVF-doxygen/html/functions_j.html +4 -6
  148. package/SVF-doxygen/html/functions_k.html +0 -6
  149. package/SVF-doxygen/html/functions_l.html +11 -25
  150. package/SVF-doxygen/html/functions_m.html +8 -9
  151. package/SVF-doxygen/html/functions_n.html +14 -17
  152. package/SVF-doxygen/html/functions_o.html +71 -90
  153. package/SVF-doxygen/html/functions_p.html +31 -30
  154. package/SVF-doxygen/html/functions_r.html +11 -15
  155. package/SVF-doxygen/html/functions_rela.html +2 -3
  156. package/SVF-doxygen/html/functions_rela_b.html +0 -1
  157. package/SVF-doxygen/html/functions_rela_e.html +0 -1
  158. package/SVF-doxygen/html/functions_rela_i.html +0 -2
  159. package/SVF-doxygen/html/functions_rela_l.html +0 -1
  160. package/SVF-doxygen/html/functions_rela_o.html +0 -18
  161. package/SVF-doxygen/html/functions_rela_r.html +2 -2
  162. package/SVF-doxygen/html/functions_rela_s.html +4 -9
  163. package/SVF-doxygen/html/functions_s.html +45 -70
  164. package/SVF-doxygen/html/functions_t.html +29 -45
  165. package/SVF-doxygen/html/functions_type.html +0 -5
  166. package/SVF-doxygen/html/functions_type_c.html +1 -1
  167. package/SVF-doxygen/html/functions_type_k.html +0 -6
  168. package/SVF-doxygen/html/functions_type_l.html +4 -3
  169. package/SVF-doxygen/html/functions_type_t.html +0 -3
  170. package/SVF-doxygen/html/functions_type_v.html +3 -5
  171. package/SVF-doxygen/html/functions_u.html +8 -4
  172. package/SVF-doxygen/html/functions_v.html +11 -20
  173. package/SVF-doxygen/html/functions_vars.html +33 -56
  174. package/SVF-doxygen/html/functions_vars_a.html +3 -0
  175. package/SVF-doxygen/html/functions_vars_g.html +2 -5
  176. package/SVF-doxygen/html/functions_vars_i.html +3 -0
  177. package/SVF-doxygen/html/functions_vars_t.html +1 -0
  178. package/SVF-doxygen/html/functions_w.html +11 -10
  179. package/SVF-doxygen/html/functions_z.html +1 -2
  180. package/SVF-doxygen/html/functions_~.html +10 -22
  181. package/SVF-doxygen/html/globals.html +2 -2
  182. package/SVF-doxygen/html/globals_defs.html +1 -4
  183. package/SVF-doxygen/html/globals_n.html +2 -5
  184. package/SVF-doxygen/html/globals_s.html +1 -1
  185. package/SVF-doxygen/html/globals_vars.html +5 -5
  186. package/SVF-doxygen/html/globals_z.html +3 -3
  187. package/SVF-doxygen/html/hierarchy.html +622 -631
  188. package/SVF-doxygen/html/namespaceSVF.html +449 -458
  189. package/SVF-doxygen/html/search/all_0.js +155 -161
  190. package/SVF-doxygen/html/search/all_1.js +502 -503
  191. package/SVF-doxygen/html/search/all_10.js +325 -326
  192. package/SVF-doxygen/html/search/all_11.js +227 -227
  193. package/SVF-doxygen/html/search/all_12.js +563 -574
  194. package/SVF-doxygen/html/search/all_13.js +206 -208
  195. package/SVF-doxygen/html/search/all_14.js +74 -73
  196. package/SVF-doxygen/html/search/all_15.js +175 -176
  197. package/SVF-doxygen/html/search/all_16.js +77 -77
  198. package/SVF-doxygen/html/search/all_17.js +1 -1
  199. package/SVF-doxygen/html/search/all_18.js +1 -1
  200. package/SVF-doxygen/html/search/all_19.js +27 -27
  201. package/SVF-doxygen/html/search/all_1a.js +175 -179
  202. package/SVF-doxygen/html/search/all_2.js +180 -182
  203. package/SVF-doxygen/html/search/all_3.js +636 -642
  204. package/SVF-doxygen/html/search/all_4.js +237 -236
  205. package/SVF-doxygen/html/search/all_5.js +120 -126
  206. package/SVF-doxygen/html/search/all_6.js +236 -236
  207. package/SVF-doxygen/html/search/all_7.js +1040 -1056
  208. package/SVF-doxygen/html/search/all_8.js +211 -215
  209. package/SVF-doxygen/html/search/all_9.js +631 -638
  210. package/SVF-doxygen/html/search/all_a.js +46 -46
  211. package/SVF-doxygen/html/search/all_b.js +24 -26
  212. package/SVF-doxygen/html/search/all_c.js +113 -115
  213. package/SVF-doxygen/html/search/all_d.js +205 -205
  214. package/SVF-doxygen/html/search/all_e.js +207 -209
  215. package/SVF-doxygen/html/search/all_f.js +122 -122
  216. package/SVF-doxygen/html/search/classes_0.js +29 -28
  217. package/SVF-doxygen/html/search/classes_1.js +11 -11
  218. package/SVF-doxygen/html/search/classes_10.js +72 -74
  219. package/SVF-doxygen/html/search/classes_11.js +14 -14
  220. package/SVF-doxygen/html/search/classes_12.js +2 -2
  221. package/SVF-doxygen/html/search/classes_13.js +10 -10
  222. package/SVF-doxygen/html/search/classes_14.js +19 -19
  223. package/SVF-doxygen/html/search/classes_15.js +1 -1
  224. package/SVF-doxygen/html/search/classes_2.js +72 -73
  225. package/SVF-doxygen/html/search/classes_3.js +35 -35
  226. package/SVF-doxygen/html/search/classes_4.js +7 -8
  227. package/SVF-doxygen/html/search/classes_5.js +28 -28
  228. package/SVF-doxygen/html/search/classes_6.js +98 -98
  229. package/SVF-doxygen/html/search/classes_7.js +34 -38
  230. package/SVF-doxygen/html/search/classes_8.js +57 -59
  231. package/SVF-doxygen/html/search/classes_9.js +1 -1
  232. package/SVF-doxygen/html/search/classes_a.js +12 -12
  233. package/SVF-doxygen/html/search/classes_b.js +29 -29
  234. package/SVF-doxygen/html/search/classes_c.js +6 -6
  235. package/SVF-doxygen/html/search/classes_d.js +19 -19
  236. package/SVF-doxygen/html/search/classes_e.js +36 -36
  237. package/SVF-doxygen/html/search/classes_f.js +25 -25
  238. package/SVF-doxygen/html/search/defines_0.js +3 -3
  239. package/SVF-doxygen/html/search/defines_1.js +3 -3
  240. package/SVF-doxygen/html/search/defines_10.js +2 -2
  241. package/SVF-doxygen/html/search/defines_2.js +30 -30
  242. package/SVF-doxygen/html/search/defines_3.js +20 -20
  243. package/SVF-doxygen/html/search/defines_4.js +3 -3
  244. package/SVF-doxygen/html/search/defines_5.js +4 -4
  245. package/SVF-doxygen/html/search/defines_6.js +2 -2
  246. package/SVF-doxygen/html/search/defines_7.js +5 -5
  247. package/SVF-doxygen/html/search/defines_8.js +11 -11
  248. package/SVF-doxygen/html/search/defines_9.js +9 -9
  249. package/SVF-doxygen/html/search/defines_a.js +2 -2
  250. package/SVF-doxygen/html/search/defines_b.js +1 -1
  251. package/SVF-doxygen/html/search/defines_c.js +3 -4
  252. package/SVF-doxygen/html/search/defines_d.js +2 -2
  253. package/SVF-doxygen/html/search/defines_e.js +8 -8
  254. package/SVF-doxygen/html/search/defines_f.js +4 -4
  255. package/SVF-doxygen/html/search/enums_0.js +3 -4
  256. package/SVF-doxygen/html/search/enums_1.js +2 -2
  257. package/SVF-doxygen/html/search/enums_10.js +1 -1
  258. package/SVF-doxygen/html/search/enums_11.js +1 -1
  259. package/SVF-doxygen/html/search/enums_2.js +9 -9
  260. package/SVF-doxygen/html/search/enums_3.js +2 -1
  261. package/SVF-doxygen/html/search/enums_4.js +3 -4
  262. package/SVF-doxygen/html/search/enums_5.js +1 -1
  263. package/SVF-doxygen/html/search/enums_6.js +2 -2
  264. package/SVF-doxygen/html/search/enums_7.js +2 -2
  265. package/SVF-doxygen/html/search/enums_8.js +4 -4
  266. package/SVF-doxygen/html/search/enums_9.js +1 -1
  267. package/SVF-doxygen/html/search/enums_a.js +1 -1
  268. package/SVF-doxygen/html/search/enums_b.js +7 -7
  269. package/SVF-doxygen/html/search/enums_c.js +1 -1
  270. package/SVF-doxygen/html/search/enums_d.js +4 -4
  271. package/SVF-doxygen/html/search/enums_e.js +2 -2
  272. package/SVF-doxygen/html/search/enums_f.js +4 -4
  273. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  274. package/SVF-doxygen/html/search/enumvalues_1.js +16 -16
  275. package/SVF-doxygen/html/search/enumvalues_10.js +36 -36
  276. package/SVF-doxygen/html/search/enumvalues_11.js +6 -5
  277. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  278. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  279. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  280. package/SVF-doxygen/html/search/enumvalues_15.js +4 -4
  281. package/SVF-doxygen/html/search/enumvalues_2.js +36 -37
  282. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  283. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  284. package/SVF-doxygen/html/search/enumvalues_5.js +50 -50
  285. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  286. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  287. package/SVF-doxygen/html/search/enumvalues_8.js +24 -24
  288. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  289. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  290. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  291. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  292. package/SVF-doxygen/html/search/enumvalues_d.js +19 -19
  293. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  294. package/SVF-doxygen/html/search/enumvalues_f.js +48 -49
  295. package/SVF-doxygen/html/search/files_0.js +18 -16
  296. package/SVF-doxygen/html/search/files_1.js +9 -9
  297. package/SVF-doxygen/html/search/files_10.js +8 -8
  298. package/SVF-doxygen/html/search/files_11.js +8 -8
  299. package/SVF-doxygen/html/search/files_12.js +2 -2
  300. package/SVF-doxygen/html/search/files_2.js +51 -53
  301. package/SVF-doxygen/html/search/files_3.js +14 -14
  302. package/SVF-doxygen/html/search/files_4.js +3 -5
  303. package/SVF-doxygen/html/search/files_5.js +13 -13
  304. package/SVF-doxygen/html/search/files_6.js +10 -10
  305. package/SVF-doxygen/html/search/files_7.js +15 -17
  306. package/SVF-doxygen/html/search/files_8.js +13 -13
  307. package/SVF-doxygen/html/search/files_9.js +18 -18
  308. package/SVF-doxygen/html/search/files_a.js +3 -3
  309. package/SVF-doxygen/html/search/files_b.js +4 -4
  310. package/SVF-doxygen/html/search/files_c.js +20 -20
  311. package/SVF-doxygen/html/search/files_d.js +4 -4
  312. package/SVF-doxygen/html/search/files_e.js +57 -62
  313. package/SVF-doxygen/html/search/files_f.js +8 -8
  314. package/SVF-doxygen/html/search/functions_0.js +13 -13
  315. package/SVF-doxygen/html/search/functions_1.js +366 -368
  316. package/SVF-doxygen/html/search/functions_10.js +139 -140
  317. package/SVF-doxygen/html/search/functions_11.js +140 -140
  318. package/SVF-doxygen/html/search/functions_12.js +294 -299
  319. package/SVF-doxygen/html/search/functions_13.js +72 -73
  320. package/SVF-doxygen/html/search/functions_14.js +41 -41
  321. package/SVF-doxygen/html/search/functions_15.js +70 -72
  322. package/SVF-doxygen/html/search/functions_16.js +38 -38
  323. package/SVF-doxygen/html/search/functions_17.js +3 -3
  324. package/SVF-doxygen/html/search/functions_18.js +175 -179
  325. package/SVF-doxygen/html/search/functions_2.js +92 -94
  326. package/SVF-doxygen/html/search/functions_3.js +258 -261
  327. package/SVF-doxygen/html/search/functions_4.js +85 -85
  328. package/SVF-doxygen/html/search/functions_5.js +54 -57
  329. package/SVF-doxygen/html/search/functions_6.js +65 -65
  330. package/SVF-doxygen/html/search/functions_7.js +857 -872
  331. package/SVF-doxygen/html/search/functions_8.js +162 -162
  332. package/SVF-doxygen/html/search/functions_9.js +440 -446
  333. package/SVF-doxygen/html/search/functions_a.js +30 -30
  334. package/SVF-doxygen/html/search/functions_b.js +2 -2
  335. package/SVF-doxygen/html/search/functions_c.js +22 -25
  336. package/SVF-doxygen/html/search/functions_d.js +82 -82
  337. package/SVF-doxygen/html/search/functions_e.js +34 -36
  338. package/SVF-doxygen/html/search/functions_f.js +58 -58
  339. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  340. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  341. package/SVF-doxygen/html/search/related_0.js +4 -4
  342. package/SVF-doxygen/html/search/related_1.js +2 -2
  343. package/SVF-doxygen/html/search/related_2.js +2 -2
  344. package/SVF-doxygen/html/search/related_3.js +2 -2
  345. package/SVF-doxygen/html/search/related_4.js +2 -2
  346. package/SVF-doxygen/html/search/related_5.js +1 -1
  347. package/SVF-doxygen/html/search/related_6.js +2 -2
  348. package/SVF-doxygen/html/search/related_7.js +5 -5
  349. package/SVF-doxygen/html/search/related_8.js +2 -2
  350. package/SVF-doxygen/html/search/related_9.js +4 -4
  351. package/SVF-doxygen/html/search/related_a.js +19 -19
  352. package/SVF-doxygen/html/search/related_b.js +4 -4
  353. package/SVF-doxygen/html/search/related_c.js +2 -2
  354. package/SVF-doxygen/html/search/related_d.js +11 -12
  355. package/SVF-doxygen/html/search/related_e.js +2 -2
  356. package/SVF-doxygen/html/search/related_f.js +2 -2
  357. package/SVF-doxygen/html/search/typedefs_0.js +18 -19
  358. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  359. package/SVF-doxygen/html/search/typedefs_10.js +65 -65
  360. package/SVF-doxygen/html/search/typedefs_11.js +12 -13
  361. package/SVF-doxygen/html/search/typedefs_12.js +13 -13
  362. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  363. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  364. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  365. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  366. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  367. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  368. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  369. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  370. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  371. package/SVF-doxygen/html/search/typedefs_9.js +4 -6
  372. package/SVF-doxygen/html/search/typedefs_a.js +30 -29
  373. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  374. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  375. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  376. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  377. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  378. package/SVF-doxygen/html/search/variables_0.js +171 -177
  379. package/SVF-doxygen/html/search/variables_1.js +78 -77
  380. package/SVF-doxygen/html/search/variables_10.js +98 -98
  381. package/SVF-doxygen/html/search/variables_11.js +47 -47
  382. package/SVF-doxygen/html/search/variables_12.js +93 -93
  383. package/SVF-doxygen/html/search/variables_13.js +76 -76
  384. package/SVF-doxygen/html/search/variables_14.js +14 -14
  385. package/SVF-doxygen/html/search/variables_15.js +49 -49
  386. package/SVF-doxygen/html/search/variables_16.js +11 -11
  387. package/SVF-doxygen/html/search/variables_17.js +1 -1
  388. package/SVF-doxygen/html/search/variables_18.js +17 -17
  389. package/SVF-doxygen/html/search/variables_2.js +40 -40
  390. package/SVF-doxygen/html/search/variables_3.js +143 -143
  391. package/SVF-doxygen/html/search/variables_4.js +51 -51
  392. package/SVF-doxygen/html/search/variables_5.js +39 -39
  393. package/SVF-doxygen/html/search/variables_6.js +66 -66
  394. package/SVF-doxygen/html/search/variables_7.js +33 -34
  395. package/SVF-doxygen/html/search/variables_8.js +8 -8
  396. package/SVF-doxygen/html/search/variables_9.js +80 -79
  397. package/SVF-doxygen/html/search/variables_a.js +4 -4
  398. package/SVF-doxygen/html/search/variables_b.js +10 -10
  399. package/SVF-doxygen/html/search/variables_c.js +44 -44
  400. package/SVF-doxygen/html/search/variables_d.js +58 -58
  401. package/SVF-doxygen/html/search/variables_e.js +123 -123
  402. package/SVF-doxygen/html/search/variables_f.js +31 -31
  403. package/SVF-doxygen/html/structSVF_1_1AbstractValue-members.html +164 -0
  404. package/SVF-doxygen/html/structSVF_1_1AbstractValue.html +2820 -0
  405. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseAbstractState_01_4-members.html +84 -0
  406. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseAbstractState_01_4.html +130 -0
  407. package/SVF-doxygen/html/svf-ex_8cpp.html +25 -25
  408. package/SVF-doxygen/html/svf-ex_8cpp_source.html +26 -26
  409. package/package.json +1 -1
  410. package/svf/include/AE/Core/AbstractState.h +749 -0
  411. package/svf/include/AE/Core/AbstractValue.h +514 -39
  412. package/svf/include/AE/Core/AddressValue.h +32 -25
  413. package/svf/include/AE/Core/IntervalValue.h +10 -24
  414. package/svf/include/AE/Core/RelExeState.h +1 -1
  415. package/svf/include/AE/Core/RelationSolver.h +9 -9
  416. package/svf/include/AE/Svfexe/{AbstractExecution.h → AbstractInterpretation.h} +27 -26
  417. package/svf/include/AE/Svfexe/BufOverflowChecker.h +5 -5
  418. package/svf/include/AE/Svfexe/ICFGSimplification.h +1 -2
  419. package/svf/include/AE/Svfexe/{SVFIR2ItvExeState.h → SVFIR2AbsState.h} +30 -33
  420. package/svf/lib/AE/Core/AbstractState.cpp +357 -0
  421. package/svf/lib/AE/Core/RelationSolver.cpp +31 -31
  422. package/svf/lib/AE/Core/SVFIR2Relation.cpp +17 -16
  423. package/svf/lib/AE/Svfexe/{AbstractExecution.cpp → AbstractInterpretation.cpp} +166 -156
  424. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +51 -47
  425. package/svf/lib/AE/Svfexe/{SVFIR2ItvExeState.cpp → SVFIR2AbsState.cpp} +211 -247
  426. package/svf-llvm/tools/AE/ae.cpp +105 -108
  427. package/svf-llvm/tools/Example/svf-ex.cpp +2 -2
  428. package/svf/include/AE/Core/ConsExeState.h +0 -453
  429. package/svf/include/AE/Core/ExeState.h +0 -304
  430. package/svf/include/AE/Core/IntervalExeState.h +0 -650
  431. package/svf/include/AE/Core/SingleAbsValue.h +0 -477
  432. package/svf/include/AE/Core/SymState.h +0 -221
  433. package/svf/include/AE/Svfexe/SVFIR2ConsExeState.h +0 -148
  434. package/svf/lib/AE/Core/ConsExeState.cpp +0 -603
  435. package/svf/lib/AE/Core/ExeState.cpp +0 -117
  436. package/svf/lib/AE/Core/IntervalExeState.cpp +0 -329
  437. package/svf/lib/AE/Core/SymState.cpp +0 -37
  438. package/svf/lib/AE/Svfexe/SVFIR2ConsExeState.cpp +0 -772
@@ -84,7 +84,7 @@ Inheritance diagram for SVF::BufOverflowChecker:</div>
84
84
  <div class="center">
85
85
  <img src="classSVF_1_1BufOverflowChecker.png" usemap="#SVF::BufOverflowChecker_map" alt=""/>
86
86
  <map id="SVF::BufOverflowChecker_map" name="SVF::BufOverflowChecker_map">
87
- <area href="classSVF_1_1AbstractExecution.html" alt="SVF::AbstractExecution" shape="rect" coords="0,0,162,24"/>
87
+ <area href="classSVF_1_1AbstractInterpretation.html" title="AbstractInterpretation is same as Abstract Execution." alt="SVF::AbstractInterpretation" shape="rect" coords="0,0,164,24"/>
88
88
  </map>
89
89
  </div></div>
90
90
  <table class="memberdecls">
@@ -92,28 +92,28 @@ Inheritance diagram for SVF::BufOverflowChecker:</div>
92
92
  Public Member Functions</h2></td></tr>
93
93
  <tr class="memitem:adcfa49d892daef07e7d4274ab8d34b6f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#adcfa49d892daef07e7d4274ab8d34b6f">BufOverflowChecker</a> ()</td></tr>
94
94
  <tr class="separator:adcfa49d892daef07e7d4274ab8d34b6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
95
- <tr class="inherit_header pub_methods_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
96
- <tr class="memitem:a84d8fedb7e9d23e92ffcb74b4cfbf78c inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">AbstractExecution</a> ()</td></tr>
97
- <tr class="memdesc:a84d8fedb7e9d23e92ffcb74b4cfbf78c inherit pub_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">More...</a><br /></td></tr>
98
- <tr class="separator:a84d8fedb7e9d23e92ffcb74b4cfbf78c inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
99
- <tr class="memitem:ac848658bb3069193b1c7b08199b3d4c7 inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac848658bb3069193b1c7b08199b3d4c7">runOnModule</a> (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a> *icfg)</td></tr>
100
- <tr class="separator:ac848658bb3069193b1c7b08199b3d4c7 inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
101
- <tr class="memitem:a6771ac262e5fdbac0006b293cde47398 inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a6771ac262e5fdbac0006b293cde47398">~AbstractExecution</a> ()</td></tr>
102
- <tr class="memdesc:a6771ac262e5fdbac0006b293cde47398 inherit pub_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classSVF_1_1AbstractExecution.html#a6771ac262e5fdbac0006b293cde47398">More...</a><br /></td></tr>
103
- <tr class="separator:a6771ac262e5fdbac0006b293cde47398 inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
104
- <tr class="memitem:a46364bb8814f7bf6ddd492aa7dc58ffb inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a46364bb8814f7bf6ddd492aa7dc58ffb">analyse</a> ()</td></tr>
105
- <tr class="memdesc:a46364bb8814f7bf6ddd492aa7dc58ffb inherit pub_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">Program entry. <a href="classSVF_1_1AbstractExecution.html#a46364bb8814f7bf6ddd492aa7dc58ffb">More...</a><br /></td></tr>
106
- <tr class="separator:a46364bb8814f7bf6ddd492aa7dc58ffb inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
107
- <tr class="memitem:a6c381287424a3623cfdae5a75d2a9c9b inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88">AEKind</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a6c381287424a3623cfdae5a75d2a9c9b">getKind</a> () const</td></tr>
108
- <tr class="separator:a6c381287424a3623cfdae5a75d2a9c9b inherit pub_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
95
+ <tr class="inherit_header pub_methods_classSVF_1_1AbstractInterpretation"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classSVF_1_1AbstractInterpretation')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classSVF_1_1AbstractInterpretation.html">SVF::AbstractInterpretation</a></td></tr>
96
+ <tr class="memitem:a4080994b793d9510c00cb3a0260e0a61 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a4080994b793d9510c00cb3a0260e0a61">AbstractInterpretation</a> ()</td></tr>
97
+ <tr class="memdesc:a4080994b793d9510c00cb3a0260e0a61 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classSVF_1_1AbstractInterpretation.html#a4080994b793d9510c00cb3a0260e0a61">More...</a><br /></td></tr>
98
+ <tr class="separator:a4080994b793d9510c00cb3a0260e0a61 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
99
+ <tr class="memitem:a971a676fb15da74d37de14725bab40b0 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a971a676fb15da74d37de14725bab40b0">runOnModule</a> (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a> *icfg)</td></tr>
100
+ <tr class="separator:a971a676fb15da74d37de14725bab40b0 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
101
+ <tr class="memitem:aae29a8da31fddd069cb0e19cc2f78d46 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#aae29a8da31fddd069cb0e19cc2f78d46">~AbstractInterpretation</a> ()</td></tr>
102
+ <tr class="memdesc:aae29a8da31fddd069cb0e19cc2f78d46 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classSVF_1_1AbstractInterpretation.html#aae29a8da31fddd069cb0e19cc2f78d46">More...</a><br /></td></tr>
103
+ <tr class="separator:aae29a8da31fddd069cb0e19cc2f78d46 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
104
+ <tr class="memitem:a2670b663d2c5afa974dfc0f316a273d1 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2670b663d2c5afa974dfc0f316a273d1">analyse</a> ()</td></tr>
105
+ <tr class="memdesc:a2670b663d2c5afa974dfc0f316a273d1 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Program entry. <a href="classSVF_1_1AbstractInterpretation.html#a2670b663d2c5afa974dfc0f316a273d1">More...</a><br /></td></tr>
106
+ <tr class="separator:a2670b663d2c5afa974dfc0f316a273d1 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
107
+ <tr class="memitem:a5a17c9de696332a712879d1a7bc77fb5 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88">AEKind</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a5a17c9de696332a712879d1a7bc77fb5">getKind</a> () const</td></tr>
108
+ <tr class="separator:a5a17c9de696332a712879d1a7bc77fb5 inherit pub_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
109
109
  </table><table class="memberdecls">
110
110
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
111
111
  Static Public Member Functions</h2></td></tr>
112
- <tr class="memitem:ace460f7684aedf51c9907c995b94b653"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#ace460f7684aedf51c9907c995b94b653">classof</a> (const <a class="el" href="classSVF_1_1AbstractExecution.html">AbstractExecution</a> *ae)</td></tr>
113
- <tr class="separator:ace460f7684aedf51c9907c995b94b653"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
- <tr class="inherit_header pub_static_methods_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
115
- <tr class="memitem:a9c23029833558b082c613fa5e0f14c0d inherit pub_static_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a9c23029833558b082c613fa5e0f14c0d">classof</a> (const <a class="el" href="classSVF_1_1AbstractExecution.html">AbstractExecution</a> *ae)</td></tr>
116
- <tr class="separator:a9c23029833558b082c613fa5e0f14c0d inherit pub_static_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
112
+ <tr class="memitem:aecc0ded0645b8a8c43a3d466b642ce08"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#aecc0ded0645b8a8c43a3d466b642ce08">classof</a> (const <a class="el" href="classSVF_1_1AbstractInterpretation.html">AbstractInterpretation</a> *ae)</td></tr>
113
+ <tr class="separator:aecc0ded0645b8a8c43a3d466b642ce08"><td class="memSeparator" colspan="2">&#160;</td></tr>
114
+ <tr class="inherit_header pub_static_methods_classSVF_1_1AbstractInterpretation"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classSVF_1_1AbstractInterpretation')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classSVF_1_1AbstractInterpretation.html">SVF::AbstractInterpretation</a></td></tr>
115
+ <tr class="memitem:aa2d9b63cb2d303e6a1d4fe84a0df265f inherit pub_static_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#aa2d9b63cb2d303e6a1d4fe84a0df265f">classof</a> (const <a class="el" href="classSVF_1_1AbstractInterpretation.html">AbstractInterpretation</a> *ae)</td></tr>
116
+ <tr class="separator:aa2d9b63cb2d303e6a1d4fe84a0df265f inherit pub_static_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
117
117
  </table><table class="memberdecls">
118
118
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
119
119
  Protected Member Functions</h2></td></tr>
@@ -127,68 +127,68 @@ Protected Member Functions</h2></td></tr>
127
127
  <tr class="separator:ad8b2f2fa6f22b9d1655135c819cbad8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
128
128
  <tr class="memitem:aa68f8aef09481d7c07dc59d7dfb83822"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">detectStrcat</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
129
129
  <tr class="separator:aa68f8aef09481d7c07dc59d7dfb83822"><td class="memSeparator" colspan="2">&#160;</td></tr>
130
- <tr class="memitem:ace5ad1d6a63d5392044fee2ecbc9236e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value, const <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> &amp;len, const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curNode)</td></tr>
131
- <tr class="separator:ace5ad1d6a63d5392044fee2ecbc9236e"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
- <tr class="inherit_header pro_methods_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
133
- <tr class="memitem:a7efff2047b2b6017fdd210a8679817cd inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a7efff2047b2b6017fdd210a8679817cd">handleGlobalNode</a> ()</td></tr>
134
- <tr class="memdesc:a7efff2047b2b6017fdd210a8679817cd inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">Global <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> is handled at the entry of the program,. <a href="classSVF_1_1AbstractExecution.html#a7efff2047b2b6017fdd210a8679817cd">More...</a><br /></td></tr>
135
- <tr class="separator:a7efff2047b2b6017fdd210a8679817cd inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
136
- <tr class="memitem:ae641b5687513661a2542e8318430d760 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ae641b5687513661a2542e8318430d760">markRecursiveFuns</a> ()</td></tr>
137
- <tr class="memdesc:ae641b5687513661a2542e8318430d760 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">mark recursive functions by detecting SCC in callgraph <a href="classSVF_1_1AbstractExecution.html#ae641b5687513661a2542e8318430d760">More...</a><br /></td></tr>
138
- <tr class="separator:ae641b5687513661a2542e8318430d760 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
139
- <tr class="memitem:a6f02cd1885c0879cb88149c91998291f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a6f02cd1885c0879cb88149c91998291f">hasInEdgesES</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
140
- <tr class="separator:a6f02cd1885c0879cb88149c91998291f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
141
- <tr class="memitem:a28df4f2bd5b337468f254cd609adb25f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a28df4f2bd5b337468f254cd609adb25f">hasBranchES</a> (const <a class="el" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a> *intraEdge, <a class="el" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es)</td></tr>
142
- <tr class="separator:a28df4f2bd5b337468f254cd609adb25f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
143
- <tr class="memitem:a6c06e39df9b60a25480b4f485d1c2cbb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a6c06e39df9b60a25480b4f485d1c2cbb">handleWTONode</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
144
- <tr class="memdesc:a6c06e39df9b60a25480b4f485d1c2cbb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle instructions in svf basic blocks <a href="classSVF_1_1AbstractExecution.html#a6c06e39df9b60a25480b4f485d1c2cbb">More...</a><br /></td></tr>
145
- <tr class="separator:a6c06e39df9b60a25480b4f485d1c2cbb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
146
- <tr class="memitem:a6cbc336372afb947c783fb14c45426df inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a6cbc336372afb947c783fb14c45426df">handleCallSite</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
147
- <tr class="separator:a6cbc336372afb947c783fb14c45426df inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
148
- <tr class="memitem:a609f7f047d88f8a2f44cd783668dc179 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a609f7f047d88f8a2f44cd783668dc179">handleCycle</a> (const <a class="el" href="namespaceSVF.html#a9c6abc711b0dcf5831d2cf175afc2414">ICFGWTOCycle</a> *cycle)</td></tr>
149
- <tr class="memdesc:a609f7f047d88f8a2f44cd783668dc179 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle wto cycle (loop) <a href="classSVF_1_1AbstractExecution.html#a609f7f047d88f8a2f44cd783668dc179">More...</a><br /></td></tr>
150
- <tr class="separator:a609f7f047d88f8a2f44cd783668dc179 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
151
- <tr class="memitem:adb88a8be0bc1c1ac2d1546e9191c6f93 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#adb88a8be0bc1c1ac2d1546e9191c6f93">handleFunc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</td></tr>
152
- <tr class="memdesc:adb88a8be0bc1c1ac2d1546e9191c6f93 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle user defined function, ext function is not included. <a href="classSVF_1_1AbstractExecution.html#adb88a8be0bc1c1ac2d1546e9191c6f93">More...</a><br /></td></tr>
153
- <tr class="separator:adb88a8be0bc1c1ac2d1546e9191c6f93 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
154
- <tr class="memitem:a97c5745ddcd0ce72e65dee09ff7afb42 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a97c5745ddcd0ce72e65dee09ff7afb42">SkipRecursiveCall</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode)</td></tr>
155
- <tr class="separator:a97c5745ddcd0ce72e65dee09ff7afb42 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
156
- <tr class="memitem:a7e1c3edfa546182ad394116b37b834f9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a7e1c3edfa546182ad394116b37b834f9">SkipRecursiveFunc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</td></tr>
157
- <tr class="separator:a7e1c3edfa546182ad394116b37b834f9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
158
- <tr class="memitem:ac7a25ad5cbc1a6132869ae54b805f73a inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac7a25ad5cbc1a6132869ae54b805f73a">hasCmpBranchES</a> (const <a class="el" href="classSVF_1_1CmpStmt.html">CmpStmt</a> *cmpStmt, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> succ, <a class="el" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es)</td></tr>
159
- <tr class="separator:ac7a25ad5cbc1a6132869ae54b805f73a inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
160
- <tr class="memitem:adc740771e712644d08f95fc6c488c1af inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#adc740771e712644d08f95fc6c488c1af">hasSwitchBranchES</a> (const <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *var, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> succ, <a class="el" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es)</td></tr>
161
- <tr class="separator:adc740771e712644d08f95fc6c488c1af inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
162
- <tr class="memitem:a598cb7b97bae122d0015c03b72beee9d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a598cb7b97bae122d0015c03b72beee9d">getAllocaInstByteSize</a> (const <a class="el" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr)</td></tr>
163
- <tr class="separator:a598cb7b97bae122d0015c03b72beee9d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
164
- <tr class="memitem:a63044080ddea89905bc9a4336eb8b2a7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a63044080ddea89905bc9a4336eb8b2a7">strRead</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *rhs)</td></tr>
165
- <tr class="separator:a63044080ddea89905bc9a4336eb8b2a7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
166
- <tr class="memitem:a99be86146ad4ddbdb900cdb6b324f943 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *strValue)</td></tr>
167
- <tr class="separator:a99be86146ad4ddbdb900cdb6b324f943 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
168
- <tr class="memitem:a2484783853c5a266223882f66e683fa9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a2484783853c5a266223882f66e683fa9">traceMemoryAllocationSize</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value)</td></tr>
169
- <tr class="separator:a2484783853c5a266223882f66e683fa9 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
170
- <tr class="memitem:a0ed5456bdeaff7ab4e1decdff8ae2afb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a0ed5456bdeaff7ab4e1decdff8ae2afb">handleStrcpy</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
171
- <tr class="separator:a0ed5456bdeaff7ab4e1decdff8ae2afb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
172
- <tr class="memitem:a28c04e0a985eda44fe8532c44c7e05bb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a28c04e0a985eda44fe8532c44c7e05bb">handleStrcat</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
173
- <tr class="separator:a28c04e0a985eda44fe8532c44c7e05bb inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
174
- <tr class="memitem:a37c0e12879d3320857a288191e6d2202 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a37c0e12879d3320857a288191e6d2202">handleMemcpy</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *src, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> len, <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> start_idx)</td></tr>
175
- <tr class="separator:a37c0e12879d3320857a288191e6d2202 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
176
- <tr class="memitem:ad70015e99339c3beb3a911c0ff6f0144 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ad70015e99339c3beb3a911c0ff6f0144">handleMemset</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> elem, <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> len)</td></tr>
177
- <tr class="separator:ad70015e99339c3beb3a911c0ff6f0144 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
178
- <tr class="memitem:a888fd56160afe0d431c47bcf10674dc0 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1SVFType.html">SVFType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id)</td></tr>
179
- <tr class="separator:a888fd56160afe0d431c47bcf10674dc0 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
180
- <tr class="memitem:afb6de3effc0f483836bfe9f42aca760d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#afb6de3effc0f483836bfe9f42aca760d">collectCheckPoint</a> ()</td></tr>
181
- <tr class="separator:afb6de3effc0f483836bfe9f42aca760d inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
182
- <tr class="memitem:aaa2f3713bd6d39bb4e9b5119b64277c7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#aaa2f3713bd6d39bb4e9b5119b64277c7">checkPointAllSet</a> ()</td></tr>
183
- <tr class="separator:aaa2f3713bd6d39bb4e9b5119b64277c7 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
184
- <tr class="memitem:a140acf4733b46855c8627cf10dbb0bd5 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a140acf4733b46855c8627cf10dbb0bd5">AccessMemoryViaRetNode</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
185
- <tr class="separator:a140acf4733b46855c8627cf10dbb0bd5 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
186
- <tr class="memitem:a20df87d2a269c3feab3acc40e4cd8801 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a20df87d2a269c3feab3acc40e4cd8801">AccessMemoryViaCopyStmt</a> (const <a class="el" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="el" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
187
- <tr class="separator:a20df87d2a269c3feab3acc40e4cd8801 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
188
- <tr class="memitem:a98f3c7d5e4b3722b717071cd320c8a60 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a98f3c7d5e4b3722b717071cd320c8a60">AccessMemoryViaLoadStmt</a> (const <a class="el" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
189
- <tr class="separator:a98f3c7d5e4b3722b717071cd320c8a60 inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
190
- <tr class="memitem:ac920e03f019c47e585f6d0138f91585f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac920e03f019c47e585f6d0138f91585f">AccessMemoryViaCallArgs</a> (const <a class="el" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
191
- <tr class="separator:ac920e03f019c47e585f6d0138f91585f inherit pro_methods_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
130
+ <tr class="memitem:ad68fa02efad8b628e4542dc9ab6c58bf"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value, const <a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;len, const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curNode)</td></tr>
131
+ <tr class="separator:ad68fa02efad8b628e4542dc9ab6c58bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
+ <tr class="inherit_header pro_methods_classSVF_1_1AbstractInterpretation"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classSVF_1_1AbstractInterpretation')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classSVF_1_1AbstractInterpretation.html">SVF::AbstractInterpretation</a></td></tr>
133
+ <tr class="memitem:a276182afcfe95235ebd2d452424e87e7 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a276182afcfe95235ebd2d452424e87e7">handleGlobalNode</a> ()</td></tr>
134
+ <tr class="memdesc:a276182afcfe95235ebd2d452424e87e7 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Global <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> is handled at the entry of the program,. <a href="classSVF_1_1AbstractInterpretation.html#a276182afcfe95235ebd2d452424e87e7">More...</a><br /></td></tr>
135
+ <tr class="separator:a276182afcfe95235ebd2d452424e87e7 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
136
+ <tr class="memitem:a738d1768c632f86d04599ec1aa53952a inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a738d1768c632f86d04599ec1aa53952a">markRecursiveFuns</a> ()</td></tr>
137
+ <tr class="memdesc:a738d1768c632f86d04599ec1aa53952a inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">mark recursive functions by detecting SCC in callgraph <a href="classSVF_1_1AbstractInterpretation.html#a738d1768c632f86d04599ec1aa53952a">More...</a><br /></td></tr>
138
+ <tr class="separator:a738d1768c632f86d04599ec1aa53952a inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
139
+ <tr class="memitem:adb96deda4bbb81956a6cfa5740503cb7 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#adb96deda4bbb81956a6cfa5740503cb7">hasInEdgesES</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
140
+ <tr class="separator:adb96deda4bbb81956a6cfa5740503cb7 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
141
+ <tr class="memitem:a8095a9c37c9ca4b96f2279df6f59bbf9 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a8095a9c37c9ca4b96f2279df6f59bbf9">hasBranchES</a> (const <a class="el" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a> *intraEdge, <a class="el" href="classSVF_1_1SparseAbstractState.html">SparseAbstractState</a> &amp;es)</td></tr>
142
+ <tr class="separator:a8095a9c37c9ca4b96f2279df6f59bbf9 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
143
+ <tr class="memitem:a80d663262a8d909ef5756391cdd82246 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a80d663262a8d909ef5756391cdd82246">handleWTONode</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
144
+ <tr class="memdesc:a80d663262a8d909ef5756391cdd82246 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle instructions in svf basic blocks <a href="classSVF_1_1AbstractInterpretation.html#a80d663262a8d909ef5756391cdd82246">More...</a><br /></td></tr>
145
+ <tr class="separator:a80d663262a8d909ef5756391cdd82246 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
146
+ <tr class="memitem:abbb4e49644121f6b038fd8fb4d7b0034 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#abbb4e49644121f6b038fd8fb4d7b0034">handleCallSite</a> (const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</td></tr>
147
+ <tr class="separator:abbb4e49644121f6b038fd8fb4d7b0034 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
148
+ <tr class="memitem:a71dff5d6a5b291014c0a65d3a6d7c8c1 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">handleCycle</a> (const <a class="el" href="namespaceSVF.html#a9c6abc711b0dcf5831d2cf175afc2414">ICFGWTOCycle</a> *cycle)</td></tr>
149
+ <tr class="memdesc:a71dff5d6a5b291014c0a65d3a6d7c8c1 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle wto cycle (loop) <a href="classSVF_1_1AbstractInterpretation.html#a71dff5d6a5b291014c0a65d3a6d7c8c1">More...</a><br /></td></tr>
150
+ <tr class="separator:a71dff5d6a5b291014c0a65d3a6d7c8c1 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
151
+ <tr class="memitem:a2e2253149e2bf114825a4e838118e012 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">handleFunc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</td></tr>
152
+ <tr class="memdesc:a2e2253149e2bf114825a4e838118e012 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">handle user defined function, ext function is not included. <a href="classSVF_1_1AbstractInterpretation.html#a2e2253149e2bf114825a4e838118e012">More...</a><br /></td></tr>
153
+ <tr class="separator:a2e2253149e2bf114825a4e838118e012 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
154
+ <tr class="memitem:af966130d5cb8d7db786c3ec056cc2dd4 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#af966130d5cb8d7db786c3ec056cc2dd4">SkipRecursiveCall</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode)</td></tr>
155
+ <tr class="separator:af966130d5cb8d7db786c3ec056cc2dd4 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
156
+ <tr class="memitem:a2b0a2f7a662909d999634d0ec08cb29c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2b0a2f7a662909d999634d0ec08cb29c">SkipRecursiveFunc</a> (const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *func)</td></tr>
157
+ <tr class="separator:a2b0a2f7a662909d999634d0ec08cb29c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
158
+ <tr class="memitem:ae0c0148baf6f7510bf8e70ee3ad626bf inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ae0c0148baf6f7510bf8e70ee3ad626bf">hasCmpBranchES</a> (const <a class="el" href="classSVF_1_1CmpStmt.html">CmpStmt</a> *cmpStmt, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> succ, <a class="el" href="classSVF_1_1SparseAbstractState.html">SparseAbstractState</a> &amp;es)</td></tr>
159
+ <tr class="separator:ae0c0148baf6f7510bf8e70ee3ad626bf inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
160
+ <tr class="memitem:ad5e8e749aec9d1c040c6be7eb26748e2 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ad5e8e749aec9d1c040c6be7eb26748e2">hasSwitchBranchES</a> (const <a class="el" href="classSVF_1_1SVFVar.html">SVFVar</a> *var, <a class="el" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> succ, <a class="el" href="classSVF_1_1SparseAbstractState.html">SparseAbstractState</a> &amp;es)</td></tr>
161
+ <tr class="separator:ad5e8e749aec9d1c040c6be7eb26748e2 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
162
+ <tr class="memitem:a0e8b546f608417e218c2fab5a5893135 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a0e8b546f608417e218c2fab5a5893135">getAllocaInstByteSize</a> (const <a class="el" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr)</td></tr>
163
+ <tr class="separator:a0e8b546f608417e218c2fab5a5893135 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
164
+ <tr class="memitem:a7dfd11b987d9ff9528277e23191ed95d inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a7dfd11b987d9ff9528277e23191ed95d">strRead</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *rhs)</td></tr>
165
+ <tr class="separator:a7dfd11b987d9ff9528277e23191ed95d inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
166
+ <tr class="memitem:a5bba3c0570d73acc743742a30af1b0b4 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVF::SVFValue</a> *strValue)</td></tr>
167
+ <tr class="separator:a5bba3c0570d73acc743742a30af1b0b4 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
168
+ <tr class="memitem:ac9e8bc430cd530e47811e28f5a9fe963 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ac9e8bc430cd530e47811e28f5a9fe963">traceMemoryAllocationSize</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *value)</td></tr>
169
+ <tr class="separator:ac9e8bc430cd530e47811e28f5a9fe963 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
170
+ <tr class="memitem:ac941d1eb9b1216c8334d0685a471b774 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ac941d1eb9b1216c8334d0685a471b774">handleStrcpy</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
171
+ <tr class="separator:ac941d1eb9b1216c8334d0685a471b774 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
172
+ <tr class="memitem:acba90e968cebacca3da78ac765df33ef inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#acba90e968cebacca3da78ac765df33ef">handleStrcat</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</td></tr>
173
+ <tr class="separator:acba90e968cebacca3da78ac765df33ef inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
174
+ <tr class="memitem:adf02c5bf1b86f00163b114a78e03120c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#adf02c5bf1b86f00163b114a78e03120c">handleMemcpy</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *src, <a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len, <a class="el" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> start_idx)</td></tr>
175
+ <tr class="separator:adf02c5bf1b86f00163b114a78e03120c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
176
+ <tr class="memitem:a568e2247536de76694dabfc5a5052b57 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a568e2247536de76694dabfc5a5052b57">handleMemset</a> (const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> *dst, <a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a> elem, <a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a> len)</td></tr>
177
+ <tr class="separator:a568e2247536de76694dabfc5a5052b57 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
178
+ <tr class="memitem:a2057e8e1c0aaf39e74f0a8fb2a1b580c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classSVF_1_1SVFType.html">SVFType</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">getPointeeElement</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> id)</td></tr>
179
+ <tr class="separator:a2057e8e1c0aaf39e74f0a8fb2a1b580c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
180
+ <tr class="memitem:aae7c67e9c423599442be721b55cd7279 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#aae7c67e9c423599442be721b55cd7279">collectCheckPoint</a> ()</td></tr>
181
+ <tr class="separator:aae7c67e9c423599442be721b55cd7279 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
182
+ <tr class="memitem:acea2c82e5b463db6f097e9a9641f601b inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#acea2c82e5b463db6f097e9a9641f601b">checkPointAllSet</a> ()</td></tr>
183
+ <tr class="separator:acea2c82e5b463db6f097e9a9641f601b inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
184
+ <tr class="memitem:a29fe7c63c61a7aec8ae1477a061f5bf2 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a29fe7c63c61a7aec8ae1477a061f5bf2">AccessMemoryViaRetNode</a> (const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
185
+ <tr class="separator:a29fe7c63c61a7aec8ae1477a061f5bf2 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
186
+ <tr class="memitem:a550c12360c2149ba0e55bdf4cf7b8dd0 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a550c12360c2149ba0e55bdf4cf7b8dd0">AccessMemoryViaCopyStmt</a> (const <a class="el" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="el" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
187
+ <tr class="separator:a550c12360c2149ba0e55bdf4cf7b8dd0 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
188
+ <tr class="memitem:ac60581a57407fa4c65b1975f5be687b8 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ac60581a57407fa4c65b1975f5be687b8">AccessMemoryViaLoadStmt</a> (const <a class="el" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
189
+ <tr class="separator:ac60581a57407fa4c65b1975f5be687b8 inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
190
+ <tr class="memitem:a048e203517ac727e6fe0653e1f24052c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a048e203517ac727e6fe0653e1f24052c">AccessMemoryViaCallArgs</a> (const <a class="el" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg, <a class="el" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;worklist, <a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFValue.html">SVFValue</a> * &gt; &amp;visited)</td></tr>
191
+ <tr class="separator:a048e203517ac727e6fe0653e1f24052c inherit pro_methods_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
192
192
  </table><table class="memberdecls">
193
193
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
194
194
  Private Member Functions</h2></td></tr>
@@ -210,56 +210,56 @@ Private Attributes</h2></td></tr>
210
210
  </table><table class="memberdecls">
211
211
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
212
212
  Additional Inherited Members</h2></td></tr>
213
- <tr class="inherit_header pub_types_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
214
- <tr class="memitem:a442fb8eda087f72aa61816213dea43af inherit pub_types_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">ExtAPIType</a> { <br />
215
- &#160;&#160;<a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">UNCLASSIFIED</a>,
216
- <a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>,
217
- <a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>,
218
- <a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>,
213
+ <tr class="inherit_header pub_types_classSVF_1_1AbstractInterpretation"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1AbstractInterpretation')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classSVF_1_1AbstractInterpretation.html">SVF::AbstractInterpretation</a></td></tr>
214
+ <tr class="memitem:a13fdb4a6a6d09e3504fdad16b88616da inherit pub_types_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">ExtAPIType</a> { <br />
215
+ &#160;&#160;<a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daad20658cd0f68b92583461b0b1f68d543">UNCLASSIFIED</a>,
216
+ <a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa9cc269dadf9cff7d399c54d9570a6614">MEMCPY</a>,
217
+ <a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa5aec33226dc590ec951d0f12bf35f15f">MEMSET</a>,
218
+ <a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa93c9b2a9dc4bdfba5a7b23cfa5f80ccb">STRCPY</a>,
219
219
  <br />
220
- &#160;&#160;<a class="el" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>
220
+ &#160;&#160;<a class="el" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daae8dad405c06383859d8db715fd455317">STRCAT</a>
221
221
  <br />
222
222
  }</td></tr>
223
- <tr class="separator:a442fb8eda087f72aa61816213dea43af inherit pub_types_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
224
- <tr class="memitem:a39c711b4657459d03ec67ae536bdec4d inherit pub_types_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1SCCDetection.html">SCCDetection</a>&lt; <a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a39c711b4657459d03ec67ae536bdec4d">CallGraphSCC</a></td></tr>
225
- <tr class="separator:a39c711b4657459d03ec67ae536bdec4d inherit pub_types_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
226
- <tr class="inherit_header pro_attribs_classSVF_1_1AbstractExecution"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSVF_1_1AbstractExecution')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classSVF_1_1AbstractExecution.html">SVF::AbstractExecution</a></td></tr>
227
- <tr class="memitem:a49742e8c3a8fe598a0945a8d8ff394d0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a></td></tr>
228
- <tr class="memdesc:a49742e8c3a8fe598a0945a8d8ff394d0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">protected data members, also used in subclasses <a href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">More...</a><br /></td></tr>
229
- <tr class="separator:a49742e8c3a8fe598a0945a8d8ff394d0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
230
- <tr class="memitem:a39439604f7d397f620a7639884ea5b50 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a39439604f7d397f620a7639884ea5b50">_callgraph</a></td></tr>
231
- <tr class="separator:a39439604f7d397f620a7639884ea5b50 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
232
- <tr class="memitem:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR2ItvExeState.html">SVFIR2ItvExeState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a></td></tr>
233
- <tr class="memdesc:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execution State, used to store the Interval Value of every <a class="el" href="namespaceSVF.html" title="for isBitcode">SVF</a> variable. <a href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">More...</a><br /></td></tr>
234
- <tr class="separator:a5e24bceb3d6961117651dbc65e9a097a inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
235
- <tr class="memitem:a26f8c21bd96ae22ca2e72af6fbfa410c inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AbstractExecution.html#ac0bcb586dffbfadeb33f501cafbaa1c9">AEAPI</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a26f8c21bd96ae22ca2e72af6fbfa410c">_api</a> {nullptr}</td></tr>
236
- <tr class="separator:a26f8c21bd96ae22ca2e72af6fbfa410c inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
237
- <tr class="memitem:ab5021d59a929f4eaf5e59d911036d201 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1ICFG.html">ICFG</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ab5021d59a929f4eaf5e59d911036d201">_icfg</a></td></tr>
238
- <tr class="separator:ab5021d59a929f4eaf5e59d911036d201 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
239
- <tr class="memitem:a74a55a4d4941c85bdfed81f060049bf0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AEStat.html">AEStat</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a74a55a4d4941c85bdfed81f060049bf0">_stat</a></td></tr>
240
- <tr class="separator:a74a55a4d4941c85bdfed81f060049bf0 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
241
- <tr class="memitem:ad36d48c0ef82de915d9339c4f47cbd70 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88">AEKind</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ad36d48c0ef82de915d9339c4f47cbd70">_kind</a></td></tr>
242
- <tr class="separator:ad36d48c0ef82de915d9339c4f47cbd70 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
243
- <tr class="memitem:a790c178f8c29eecfc256a5dfd97d1637 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a790c178f8c29eecfc256a5dfd97d1637">_bugLoc</a></td></tr>
244
- <tr class="separator:a790c178f8c29eecfc256a5dfd97d1637 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
245
- <tr class="memitem:a5ed683d635bd05f0bee10436d20deb31 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFBugReport.html">SVFBugReport</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a5ed683d635bd05f0bee10436d20deb31">_recoder</a></td></tr>
246
- <tr class="separator:a5ed683d635bd05f0bee10436d20deb31 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
247
- <tr class="memitem:ab9d6ebcf67ec473ce7ad5910c74eddc1 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top">std::vector&lt; const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ab9d6ebcf67ec473ce7ad5910c74eddc1">_callSiteStack</a></td></tr>
248
- <tr class="separator:ab9d6ebcf67ec473ce7ad5910c74eddc1 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
249
- <tr class="memitem:a04e812385041270901af0f2cb599fa96 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *, <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a04e812385041270901af0f2cb599fa96">_nodeToBugInfo</a></td></tr>
250
- <tr class="separator:a04e812385041270901af0f2cb599fa96 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
251
- <tr class="memitem:a53f3b9c51ed8648f14ecb703e9fe67ae inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a53f3b9c51ed8648f14ecb703e9fe67ae">_ander</a></td></tr>
252
- <tr class="separator:a53f3b9c51ed8648f14ecb703e9fe67ae inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
253
- <tr class="memitem:ade8434d8f0f5d832842d60b7a56fa64f inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *, <a class="el" href="classSVF_1_1ICFGWTO.html">ICFGWTO</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ade8434d8f0f5d832842d60b7a56fa64f">_funcToWTO</a></td></tr>
254
- <tr class="separator:ade8434d8f0f5d832842d60b7a56fa64f inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
255
- <tr class="memitem:ac7b2e6bdccab5a507c9e8db8ea4682d3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac7b2e6bdccab5a507c9e8db8ea4682d3">_recursiveFuns</a></td></tr>
256
- <tr class="separator:ac7b2e6bdccab5a507c9e8db8ea4682d3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
257
- <tr class="memitem:ac1742440725909fee77526726424d135 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>, std::function&lt; void(const <a class="el" href="classSVF_1_1CallSite.html">CallSite</a> &amp;)&gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a></td></tr>
258
- <tr class="separator:ac1742440725909fee77526726424d135 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
259
- <tr class="memitem:a0a64bef0cc898059c50f6aec470cc6d9 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a></td></tr>
260
- <tr class="separator:a0a64bef0cc898059c50f6aec470cc6d9 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
261
- <tr class="memitem:a32abc52bc54745027aa2daa67a8278f3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a></td></tr>
262
- <tr class="separator:a32abc52bc54745027aa2daa67a8278f3 inherit pro_attribs_classSVF_1_1AbstractExecution"><td class="memSeparator" colspan="2">&#160;</td></tr>
223
+ <tr class="separator:a13fdb4a6a6d09e3504fdad16b88616da inherit pub_types_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
224
+ <tr class="memitem:a3c1b3407928ab39c68300e9d8f225d46 inherit pub_types_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1SCCDetection.html">SCCDetection</a>&lt; <a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a3c1b3407928ab39c68300e9d8f225d46">CallGraphSCC</a></td></tr>
225
+ <tr class="separator:a3c1b3407928ab39c68300e9d8f225d46 inherit pub_types_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
226
+ <tr class="inherit_header pro_attribs_classSVF_1_1AbstractInterpretation"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classSVF_1_1AbstractInterpretation')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classSVF_1_1AbstractInterpretation.html">SVF::AbstractInterpretation</a></td></tr>
227
+ <tr class="memitem:a618fc324a6c205d7e1b471bd850377a9 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a></td></tr>
228
+ <tr class="memdesc:a618fc324a6c205d7e1b471bd850377a9 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">protected data members, also used in subclasses <a href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">More...</a><br /></td></tr>
229
+ <tr class="separator:a618fc324a6c205d7e1b471bd850377a9 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
230
+ <tr class="memitem:adf3fad75a4f96aefe5c25e3405509fbe inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#adf3fad75a4f96aefe5c25e3405509fbe">_callgraph</a></td></tr>
231
+ <tr class="separator:adf3fad75a4f96aefe5c25e3405509fbe inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
232
+ <tr class="memitem:af78f068a373ebb6a2f14dcde980a9dae inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFIR2AbsState.html">SVFIR2AbsState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a></td></tr>
233
+ <tr class="memdesc:af78f068a373ebb6a2f14dcde980a9dae inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execution State, used to store the Interval Value of every <a class="el" href="namespaceSVF.html" title="for isBitcode">SVF</a> variable. <a href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">More...</a><br /></td></tr>
234
+ <tr class="separator:af78f068a373ebb6a2f14dcde980a9dae inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
235
+ <tr class="memitem:a00154ebaceda1be070b38803c1a82535 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ac0bcb586dffbfadeb33f501cafbaa1c9">AEAPI</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a00154ebaceda1be070b38803c1a82535">_api</a> {nullptr}</td></tr>
236
+ <tr class="separator:a00154ebaceda1be070b38803c1a82535 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
237
+ <tr class="memitem:ab988e460fe92f0ba3c4cbee8e0c480a0 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1ICFG.html">ICFG</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#ab988e460fe92f0ba3c4cbee8e0c480a0">_icfg</a></td></tr>
238
+ <tr class="separator:ab988e460fe92f0ba3c4cbee8e0c480a0 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
239
+ <tr class="memitem:a75e493e6b9db3e29428794432d293bc2 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AEStat.html">AEStat</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a75e493e6b9db3e29428794432d293bc2">_stat</a></td></tr>
240
+ <tr class="separator:a75e493e6b9db3e29428794432d293bc2 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
241
+ <tr class="memitem:a5d3b15c3cdb9c8e91b942924bf8aee21 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88">AEKind</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a5d3b15c3cdb9c8e91b942924bf8aee21">_kind</a></td></tr>
242
+ <tr class="separator:a5d3b15c3cdb9c8e91b942924bf8aee21 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
243
+ <tr class="memitem:a2a5e0a88ebef4ae740983726e7f1b5eb inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2a5e0a88ebef4ae740983726e7f1b5eb">_bugLoc</a></td></tr>
244
+ <tr class="separator:a2a5e0a88ebef4ae740983726e7f1b5eb inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
245
+ <tr class="memitem:a8e4f0c5f527e321369a19a0b37124079 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1SVFBugReport.html">SVFBugReport</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a8e4f0c5f527e321369a19a0b37124079">_recoder</a></td></tr>
246
+ <tr class="separator:a8e4f0c5f527e321369a19a0b37124079 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
247
+ <tr class="memitem:a9885b50cf28b65bebb488442085fab26 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top">std::vector&lt; const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a9885b50cf28b65bebb488442085fab26">_callSiteStack</a></td></tr>
248
+ <tr class="separator:a9885b50cf28b65bebb488442085fab26 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
249
+ <tr class="memitem:a09aa739395388f64fcb3d539d58d2041 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *, <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a09aa739395388f64fcb3d539d58d2041">_nodeToBugInfo</a></td></tr>
250
+ <tr class="separator:a09aa739395388f64fcb3d539d58d2041 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
251
+ <tr class="memitem:abc0d4715611b8f4a61e1da82658ef95f inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#abc0d4715611b8f4a61e1da82658ef95f">_ander</a></td></tr>
252
+ <tr class="separator:abc0d4715611b8f4a61e1da82658ef95f inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
253
+ <tr class="memitem:af41aa555a5b607ae7700263ac72f8dbb inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *, <a class="el" href="classSVF_1_1ICFGWTO.html">ICFGWTO</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#af41aa555a5b607ae7700263ac72f8dbb">_funcToWTO</a></td></tr>
254
+ <tr class="separator:af41aa555a5b607ae7700263ac72f8dbb inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
255
+ <tr class="memitem:a9b5e58476c372570551da971d22c5c02 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a9b5e58476c372570551da971d22c5c02">_recursiveFuns</a></td></tr>
256
+ <tr class="separator:a9b5e58476c372570551da971d22c5c02 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
257
+ <tr class="memitem:aa27d0ef684deec1f5385fdb0d4c64827 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a>, std::function&lt; void(const <a class="el" href="classSVF_1_1CallSite.html">CallSite</a> &amp;)&gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a></td></tr>
258
+ <tr class="separator:aa27d0ef684deec1f5385fdb0d4c64827 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
259
+ <tr class="memitem:a219313e979d779221116c1bc45becc1b inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; const <a class="el" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a219313e979d779221116c1bc45becc1b">_checkpoints</a></td></tr>
260
+ <tr class="separator:a219313e979d779221116c1bc45becc1b inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
261
+ <tr class="memitem:a2a1e1b72ed740cef4c3e57e3e32c3f75 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>&lt; <a class="el" href="cJSON_8cpp.html#ae1adbce218e7a9d09164012443191d24">std::string</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1AbstractInterpretation.html#a2a1e1b72ed740cef4c3e57e3e32c3f75">_checkpoint_names</a></td></tr>
262
+ <tr class="separator:a2a1e1b72ed740cef4c3e57e3e32c3f75 inherit pro_attribs_classSVF_1_1AbstractInterpretation"><td class="memSeparator" colspan="2">&#160;</td></tr>
263
263
  </table>
264
264
  <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
265
265
  <div class="textblock">
@@ -289,10 +289,10 @@ Additional Inherited Members</h2></td></tr>
289
289
  </div><div class="memdoc">
290
290
 
291
291
  <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8h_source.html#l00106">106</a> of file <a class="el" href="BufOverflowChecker_8h_source.html">BufOverflowChecker.h</a>.</p>
292
- <div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; : <a class="code" href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">AbstractExecution</a>()</div>
292
+ <div class="fragment"><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; : <a class="code" href="classSVF_1_1AbstractInterpretation.html#a4080994b793d9510c00cb3a0260e0a61">AbstractInterpretation</a>()</div>
293
293
  <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
294
294
  <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">initExtFunMap</a>();</div>
295
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ad36d48c0ef82de915d9339c4f47cbd70">_kind</a> = <a class="code" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">AEKind::BufOverflowChecker</a>;</div>
295
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5d3b15c3cdb9c8e91b942924bf8aee21">_kind</a> = <a class="code" href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">AEKind::BufOverflowChecker</a>;</div>
296
296
  <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">initExtAPIBufOverflowCheckRules</a>();</div>
297
297
  <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
298
298
  </div><!-- fragment -->
@@ -343,8 +343,8 @@ Additional Inherited Members</h2></td></tr>
343
343
 
344
344
  </div>
345
345
  </div>
346
- <a id="ace5ad1d6a63d5392044fee2ecbc9236e"></a>
347
- <h2 class="memtitle"><span class="permalink"><a href="#ace5ad1d6a63d5392044fee2ecbc9236e">&#9670;&nbsp;</a></span>canSafelyAccessMemory()</h2>
346
+ <a id="ad68fa02efad8b628e4542dc9ab6c58bf"></a>
347
+ <h2 class="memtitle"><span class="permalink"><a href="#ad68fa02efad8b628e4542dc9ab6c58bf">&#9670;&nbsp;</a></span>canSafelyAccessMemory()</h2>
348
348
 
349
349
  <div class="memitem">
350
350
  <div class="memproto">
@@ -361,7 +361,7 @@ Additional Inherited Members</h2></td></tr>
361
361
  <tr>
362
362
  <td class="paramkey"></td>
363
363
  <td></td>
364
- <td class="paramtype">const <a class="el" href="classSVF_1_1IntervalValue.html">IntervalValue</a> &amp;&#160;</td>
364
+ <td class="paramtype">const <a class="el" href="structSVF_1_1AbstractValue.html">AbstractValue</a> &amp;&#160;</td>
365
365
  <td class="paramname"><em>len</em>, </td>
366
366
  </tr>
367
367
  <tr>
@@ -394,12 +394,12 @@ Additional Inherited Members</h2></td></tr>
394
394
  <p>Usually called by a <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a> overflow check, or external API (like memcpy) overflow check Defitions of Terms: source node: malloc or gepStmt(array), sink node: gepStmt or external API (like memcpy) e.g. 1) a = malloc(10), a[11] = 10, a[11] is the sink node, a is the source node (malloc) 2) A = struct {int a[10];}, A.a[11] = 10, A.a[11] is the sink, A.a is the source node (gepStmt(array))</p>
395
395
  <p>it tracks the value flow from sink to source, and accumulates offset then compare the accumulated offset and malloc size (or gepStmt array size)</p>
396
396
 
397
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00485">485</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
397
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00489">489</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
398
398
 
399
399
  </div>
400
400
  </div>
401
- <a id="ace460f7684aedf51c9907c995b94b653"></a>
402
- <h2 class="memtitle"><span class="permalink"><a href="#ace460f7684aedf51c9907c995b94b653">&#9670;&nbsp;</a></span>classof()</h2>
401
+ <a id="aecc0ded0645b8a8c43a3d466b642ce08"></a>
402
+ <h2 class="memtitle"><span class="permalink"><a href="#aecc0ded0645b8a8c43a3d466b642ce08">&#9670;&nbsp;</a></span>classof()</h2>
403
403
 
404
404
  <div class="memitem">
405
405
  <div class="memproto">
@@ -410,7 +410,7 @@ Additional Inherited Members</h2></td></tr>
410
410
  <tr>
411
411
  <td class="memname">static bool SVF::BufOverflowChecker::classof </td>
412
412
  <td>(</td>
413
- <td class="paramtype">const <a class="el" href="classSVF_1_1AbstractExecution.html">AbstractExecution</a> *&#160;</td>
413
+ <td class="paramtype">const <a class="el" href="classSVF_1_1AbstractInterpretation.html">AbstractInterpretation</a> *&#160;</td>
414
414
  <td class="paramname"><em>ae</em></td><td>)</td>
415
415
  <td></td>
416
416
  </tr>
@@ -495,43 +495,43 @@ Additional Inherited Members</h2></td></tr>
495
495
  </dl>
496
496
  <dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
497
497
 
498
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00372">372</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
499
- <div class="fragment"><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;{</div>
500
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite());</div>
501
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">// check the arg size</span></div>
502
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// if it is strcat group, we need to check the length of string,</span></div>
503
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// e.g. strcat(str1, str2); which checks AllocSize(str1) &gt;= Strlen(str1) + Strlen(str2);</span></div>
504
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// if it is strncat group, we do not need to check the length of string,</span></div>
505
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// e.g. strncat(str1, str2, n); which checks AllocSize(str1) &gt;= Strlen(str1) + n;</span></div>
506
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
507
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strcatGroup = {<span class="stringliteral">&quot;__strcat_chk&quot;</span>, <span class="stringliteral">&quot;strcat&quot;</span>, <span class="stringliteral">&quot;__wcscat_chk&quot;</span>, <span class="stringliteral">&quot;wcscat&quot;</span>};</div>
508
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strncatGroup = {<span class="stringliteral">&quot;__strncat_chk&quot;</span>, <span class="stringliteral">&quot;strncat&quot;</span>, <span class="stringliteral">&quot;__wcsncat_chk&quot;</span>, <span class="stringliteral">&quot;wcsncat&quot;</span>};</div>
509
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun-&gt;getName()) != strcatGroup.end())</div>
510
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div>
511
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
512
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
513
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
514
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; IntervalValue strLen0 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg0Val);</div>
515
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; IntervalValue strLen1 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg1Val);</div>
516
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; IntervalValue totalLen = strLen0 + strLen1;</div>
517
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
518
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
519
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun-&gt;getName()) != strncatGroup.end())</div>
520
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
521
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
522
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
523
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keyword">const</span> SVFValue* arg2Val = cs.getArgument(2);</div>
524
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; IntervalValue arg2Num = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(arg2Val)];</div>
525
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; IntervalValue strLen0 = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg0Val);</div>
526
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; IntervalValue totalLen = strLen0 + arg2Num;</div>
527
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
528
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div>
529
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">else</span></div>
530
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
531
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown strcat function, please add it to strcatGroup or strncatGroup&quot;</span>);</div>
532
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; abort();</div>
533
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
534
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;}</div>
498
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00376">376</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
499
+ <div class="fragment"><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;{</div>
500
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite());</div>
501
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// check the arg size</span></div>
502
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// if it is strcat group, we need to check the length of string,</span></div>
503
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// e.g. strcat(str1, str2); which checks AllocSize(str1) &gt;= Strlen(str1) + Strlen(str2);</span></div>
504
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// if it is strncat group, we do not need to check the length of string,</span></div>
505
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// e.g. strncat(str1, str2, n); which checks AllocSize(str1) &gt;= Strlen(str1) + n;</span></div>
506
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div>
507
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strcatGroup = {<span class="stringliteral">&quot;__strcat_chk&quot;</span>, <span class="stringliteral">&quot;strcat&quot;</span>, <span class="stringliteral">&quot;__wcscat_chk&quot;</span>, <span class="stringliteral">&quot;wcscat&quot;</span>};</div>
508
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt; strncatGroup = {<span class="stringliteral">&quot;__strncat_chk&quot;</span>, <span class="stringliteral">&quot;strncat&quot;</span>, <span class="stringliteral">&quot;__wcsncat_chk&quot;</span>, <span class="stringliteral">&quot;wcsncat&quot;</span>};</div>
509
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun-&gt;getName()) != strcatGroup.end())</div>
510
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
511
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
512
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
513
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
514
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; AbstractValue strLen0 = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a>(arg0Val);</div>
515
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; AbstractValue strLen1 = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a>(arg1Val);</div>
516
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; AbstractValue totalLen = strLen0 + strLen1;</div>
517
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
518
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
519
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun-&gt;getName()) != strncatGroup.end())</div>
520
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
521
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
522
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
523
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> SVFValue* arg2Val = cs.getArgument(2);</div>
524
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; AbstractValue arg2Num = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>()[<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(arg2Val)];</div>
525
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; AbstractValue strLen0 = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a>(arg0Val);</div>
526
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; AbstractValue totalLen = strLen0 + arg2Num;</div>
527
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
528
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
529
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">else</span></div>
530
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div>
531
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unknown strcat function, please add it to strcatGroup or strncatGroup&quot;</span>);</div>
532
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; abort();</div>
533
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
534
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div>
535
535
  </div><!-- fragment -->
536
536
  </div>
537
537
  </div>
@@ -567,15 +567,15 @@ Additional Inherited Members</h2></td></tr>
567
567
  </dl>
568
568
  <dl class="section return"><dt>Returns</dt><dd>true if the buffer overflow is detected </dd></dl>
569
569
 
570
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00123">123</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
571
- <div class="fragment"><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div>
572
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
573
- <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
574
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
575
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; IntervalValue strLen = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(arg1Val);</div>
576
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// no need to -1, since it has \0 as the last byte</span></div>
577
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(arg0Val, strLen, call);</div>
578
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div>
570
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00124">124</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
571
+ <div class="fragment"><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;{</div>
572
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
573
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> SVFValue* arg0Val = cs.getArgument(0);</div>
574
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">const</span> SVFValue* arg1Val = cs.getArgument(1);</div>
575
+ <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; AbstractValue strLen = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a>(arg1Val);</div>
576
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// no need to -1, since it has \0 as the last byte</span></div>
577
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(arg0Val, strLen, call);</div>
578
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div>
579
579
  </div><!-- fragment -->
580
580
  </div>
581
581
  </div>
@@ -610,82 +610,82 @@ Additional Inherited Members</h2></td></tr>
610
610
  </dd>
611
611
  </dl>
612
612
 
613
- <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">SVF::AbstractExecution</a>.</p>
613
+ <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">SVF::AbstractInterpretation</a>.</p>
614
614
 
615
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00410">410</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
616
- <div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{</div>
617
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">AbstractExecution::handleExtAPI</a>(call);</div>
618
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite());</div>
619
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; assert(fun &amp;&amp; <span class="stringliteral">&quot;SVFFunction* is nullptr&quot;</span>);</div>
620
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
621
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// check the type of mem api,</span></div>
622
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// MEMCPY: like memcpy, memcpy_chk, llvm.memcpy etc.</span></div>
623
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// MEMSET: like memset, memset_chk, llvm.memset etc.</span></div>
624
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// STRCPY: like strcpy, strcpy_chk, wcscpy etc.</span></div>
625
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// STRCAT: like strcat, strcat_chk, wcscat etc.</span></div>
626
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// for other ext api like printf, scanf, etc., they have their own handlers</span></div>
627
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">ExtAPIType</a> extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">UNCLASSIFIED</a>;</div>
628
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// get type of mem api</span></div>
629
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;annotation: fun-&gt;getAnnotations())</div>
630
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div>
631
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMCPY&quot;</span>) != std::string::npos)</div>
632
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>;</div>
633
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMSET&quot;</span>) != std::string::npos)</div>
634
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>;</div>
635
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCPY&quot;</span>) != std::string::npos)</div>
636
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>;</div>
637
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCAT&quot;</span>) != std::string::npos)</div>
638
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>;</div>
639
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
640
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="comment">// 1. memcpy functions like memcpy_chk, strncpy, annotate(&quot;MEMCPY&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;), annotate(&quot;BUF_CHECK:Arg1, Arg2&quot;)</span></div>
641
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">MEMCPY</a>)</div>
642
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
643
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;getName()) == 0)</div>
644
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
645
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
646
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;Warning: &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
647
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span>;</div>
648
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
649
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// call parseMemcpyBufferCheckArgs to parse the BUF_CHECK annotation</span></div>
650
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;getName());</div>
651
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
652
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
653
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
654
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; IntervalValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
655
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
656
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
657
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
658
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// 2. memset functions like memset, memset_chk, annotate(&quot;MEMSET&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;)</span></div>
659
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">MEMSET</a>)</div>
660
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; {</div>
661
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;getName()) == 0)</div>
662
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; {</div>
663
- <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
664
- <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;Warning: &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
665
- <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">return</span>;</div>
666
- <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
667
- <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;getName());</div>
668
- <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
669
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
670
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div>
671
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; IntervalValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
672
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
673
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div>
674
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
675
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">STRCPY</a>)</div>
676
- <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div>
677
- <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">detectStrcpy</a>(call);</div>
615
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00414">414</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
616
+ <div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div>
617
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">AbstractInterpretation::handleExtAPI</a>(call);</div>
618
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">const</span> SVFFunction *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;getCallSite());</div>
619
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; assert(fun &amp;&amp; <span class="stringliteral">&quot;SVFFunction* is nullptr&quot;</span>);</div>
620
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; CallSite cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;getCallSite());</div>
621
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// check the type of mem api,</span></div>
622
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// MEMCPY: like memcpy, memcpy_chk, llvm.memcpy etc.</span></div>
623
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// MEMSET: like memset, memset_chk, llvm.memset etc.</span></div>
624
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// STRCPY: like strcpy, strcpy_chk, wcscpy etc.</span></div>
625
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="comment">// STRCAT: like strcat, strcat_chk, wcscat etc.</span></div>
626
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// for other ext api like printf, scanf, etc., they have their own handlers</span></div>
627
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">ExtAPIType</a> extType = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daad20658cd0f68b92583461b0b1f68d543">UNCLASSIFIED</a>;</div>
628
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="comment">// get type of mem api</span></div>
629
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;annotation: fun-&gt;getAnnotations())</div>
630
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
631
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMCPY&quot;</span>) != std::string::npos)</div>
632
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa9cc269dadf9cff7d399c54d9570a6614">MEMCPY</a>;</div>
633
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMSET&quot;</span>) != std::string::npos)</div>
634
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa5aec33226dc590ec951d0f12bf35f15f">MEMSET</a>;</div>
635
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCPY&quot;</span>) != std::string::npos)</div>
636
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa93c9b2a9dc4bdfba5a7b23cfa5f80ccb">STRCPY</a>;</div>
637
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCAT&quot;</span>) != std::string::npos)</div>
638
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; extType = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daae8dad405c06383859d8db715fd455317">STRCAT</a>;</div>
639
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
640
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">// 1. memcpy functions like memcpy_chk, strncpy, annotate(&quot;MEMCPY&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;), annotate(&quot;BUF_CHECK:Arg1, Arg2&quot;)</span></div>
641
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa9cc269dadf9cff7d399c54d9570a6614">MEMCPY</a>)</div>
642
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
643
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;getName()) == 0)</div>
644
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
645
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
646
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;Warning: &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
647
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">return</span>;</div>
648
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
649
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// call parseMemcpyBufferCheckArgs to parse the BUF_CHECK annotation</span></div>
650
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;getName());</div>
651
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
652
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
653
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
654
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; AbstractValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>()[<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
655
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
656
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
657
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
658
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">// 2. memset functions like memset, memset_chk, annotate(&quot;MEMSET&quot;), annotate(&quot;BUF_CHECK:Arg0, Arg2&quot;)</span></div>
659
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa5aec33226dc590ec951d0f12bf35f15f">MEMSET</a>)</div>
660
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
661
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;getName()) == 0)</div>
662
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div>
663
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
664
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVFUtil::errs</a>() &lt;&lt; <span class="stringliteral">&quot;Warning: &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
665
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span>;</div>
666
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div>
667
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;getName());</div>
668
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
669
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
670
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; {</div>
671
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; AbstractValue <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>()[<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(arg.second))] - IntervalValue(1);</div>
672
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
673
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
678
674
  <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
679
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">STRCAT</a>)</div>
675
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa93c9b2a9dc4bdfba5a7b23cfa5f80ccb">STRCPY</a>)</div>
680
676
  <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div>
681
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">detectStrcat</a>(call);</div>
677
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">detectStrcpy</a>(call);</div>
682
678
  <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div>
683
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">else</span></div>
679
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daae8dad405c06383859d8db715fd455317">STRCAT</a>)</div>
684
680
  <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
685
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; </div>
681
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">detectStrcat</a>(call);</div>
686
682
  <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div>
687
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">return</span>;</div>
688
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;}</div>
683
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">else</span></div>
684
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; {</div>
685
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
686
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
687
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">return</span>;</div>
688
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;}</div>
689
689
  </div><!-- fragment -->
690
690
  </div>
691
691
  </div>
@@ -720,7 +720,7 @@ Additional Inherited Members</h2></td></tr>
720
720
  </dd>
721
721
  </dl>
722
722
 
723
- <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#a714fa1f4794008f630de415414cf8bfd">SVF::AbstractExecution</a>.</p>
723
+ <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractInterpretation.html#a9b179466955023f275b6692b59048846">SVF::AbstractInterpretation</a>.</p>
724
724
 
725
725
  </div>
726
726
  </div>
@@ -755,21 +755,22 @@ Additional Inherited Members</h2></td></tr>
755
755
  </dd>
756
756
  </dl>
757
757
 
758
- <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#a1d725fe50a7084bfa18bd47b941af885">SVF::AbstractExecution</a>.</p>
758
+ <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">SVF::AbstractInterpretation</a>.</p>
759
759
 
760
760
  <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00062">62</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
761
761
  <div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div>
762
- <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a1d725fe50a7084bfa18bd47b941af885">AbstractExecution::handleSVFStatement</a>(stmt);</div>
762
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">AbstractInterpretation::handleSVFStatement</a>(stmt);</div>
763
763
  <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// for gep stmt, add the gep stmt to the addrToGep map</span></div>
764
764
  <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> GepStmt *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
765
765
  <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
766
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addrID: <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(gep-&gt;getLHSVarID()))</div>
767
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
768
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(addrID);</div>
769
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">_addrToGep</a>[objId] = gep;</div>
770
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
771
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
772
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
766
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addrID:</div>
767
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#aa3e62b9ef912def502b95992199f5d8c">getAddrs</a>(gep-&gt;getLHSVarID()).<a class="code" href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">getAddrs</a>())</div>
768
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
769
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objId = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#ac37760566b534d89a61d789b00efb993">getInternalID</a>(addrID);</div>
770
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">_addrToGep</a>[objId] = gep;</div>
771
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
772
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
773
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
773
774
  </div><!-- fragment -->
774
775
  </div>
775
776
  </div>
@@ -798,51 +799,51 @@ Additional Inherited Members</h2></td></tr>
798
799
  <p>the map of ext apis of buffer overflow checking rules</p>
799
800
  <p>it initialize the rules of extapis about buffer overflow checking e.g. memcpy(dst, src, sz) -&gt; we check allocSize(dst)&gt;=sz and allocSize(src)&gt;=sz </p>
800
801
 
801
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00076">76</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
802
- <div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
803
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">//void llvm_memcpy_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
804
- <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
805
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">//void llvm_memcpy_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
806
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
807
- <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">//void llvm_memcpy_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
808
- <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
809
- <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">//void llvm_memcpy(char* dst, char* src, int sz, int flag){}</span></div>
810
- <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy&quot;</span>] = {{0, 2}, {1,2}};</div>
811
- <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">//void llvm_memmove(char* dst, char* src, int sz, int flag){}</span></div>
812
- <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
813
- <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">//void llvm_memmove_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
814
- <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
815
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">//void llvm_memmove_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
816
- <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
817
- <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">//void llvm_memmove_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
818
- <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
819
- <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">//void __memcpy_chk(char* dst, char* src, int sz, int flag){}</span></div>
820
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memcpy_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
821
- <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">//void *memmove(void *str1, const void *str2, unsigned long n)</span></div>
822
- <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
823
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">//void bcopy(const void *s1, void *s2, unsigned long n){}</span></div>
824
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;bcopy&quot;</span>] = {{0, 2}, {1,2}};</div>
825
- <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">//void *memccpy( void * restrict dest, const void * restrict src, int c, unsigned long count)</span></div>
826
- <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memccpy&quot;</span>] = {{0, 3}, {1,3}};</div>
827
- <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">//void __memmove_chk(char* dst, char* src, int sz){}</span></div>
828
- <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memmove_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
829
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">//void llvm_memset(char* dst, char elem, int sz, int flag){}</span></div>
830
- <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset&quot;</span>] = {{0, 2}};</div>
831
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">//void llvm_memset_p0i8_i32(char* dst, char elem, int sz, int flag){}</span></div>
832
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i32&quot;</span>] = {{0, 2}};</div>
833
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">//void llvm_memset_p0i8_i64(char* dst, char elem, int sz, int flag){}</span></div>
834
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i64&quot;</span>] = {{0, 2}};</div>
835
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">//void llvm_memset_p0_i64(char* dst, char elem, int sz, int flag){}</span></div>
836
- <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0_i64&quot;</span>] = {{0, 2}};</div>
837
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">//char *__memset_chk(char * dest, int c, unsigned long destlen, int flag)</span></div>
838
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memset_chk&quot;</span>] = {{0, 2}};</div>
839
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">//char *wmemset(wchar_t * dst, wchar_t elem, int sz, int flag) {</span></div>
840
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;wmemset&quot;</span>] = {{0, 2}};</div>
841
- <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">//char *strncpy(char *dest, const char *src, unsigned long n)</span></div>
842
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;strncpy&quot;</span>] = {{0, 2}, {1,2}};</div>
843
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">//unsigned long iconv(void* cd, char **restrict inbuf, unsigned long *restrict inbytesleft, char **restrict outbuf, unsigned long *restrict outbytesleft)</span></div>
844
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;iconv&quot;</span>] = {{1, 2}, {3, 4}};</div>
845
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div>
802
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00077">77</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
803
+ <div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div>
804
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">//void llvm_memcpy_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
805
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
806
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">//void llvm_memcpy_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
807
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
808
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">//void llvm_memcpy_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
809
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
810
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">//void llvm_memcpy(char* dst, char* src, int sz, int flag){}</span></div>
811
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy&quot;</span>] = {{0, 2}, {1,2}};</div>
812
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">//void llvm_memmove(char* dst, char* src, int sz, int flag){}</span></div>
813
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
814
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">//void llvm_memmove_p0i8_p0i8_i64(char* dst, char* src, int sz, int flag){}</span></div>
815
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
816
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">//void llvm_memmove_p0_p0_i64(char* dst, char* src, int sz, int flag){}</span></div>
817
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
818
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">//void llvm_memmove_p0i8_p0i8_i32(char* dst, char* src, int sz, int flag){}</span></div>
819
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
820
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">//void __memcpy_chk(char* dst, char* src, int sz, int flag){}</span></div>
821
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memcpy_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
822
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">//void *memmove(void *str1, const void *str2, unsigned long n)</span></div>
823
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
824
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">//void bcopy(const void *s1, void *s2, unsigned long n){}</span></div>
825
+ <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;bcopy&quot;</span>] = {{0, 2}, {1,2}};</div>
826
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">//void *memccpy( void * restrict dest, const void * restrict src, int c, unsigned long count)</span></div>
827
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memccpy&quot;</span>] = {{0, 3}, {1,3}};</div>
828
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">//void __memmove_chk(char* dst, char* src, int sz){}</span></div>
829
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memmove_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
830
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">//void llvm_memset(char* dst, char elem, int sz, int flag){}</span></div>
831
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset&quot;</span>] = {{0, 2}};</div>
832
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">//void llvm_memset_p0i8_i32(char* dst, char elem, int sz, int flag){}</span></div>
833
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i32&quot;</span>] = {{0, 2}};</div>
834
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">//void llvm_memset_p0i8_i64(char* dst, char elem, int sz, int flag){}</span></div>
835
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i64&quot;</span>] = {{0, 2}};</div>
836
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">//void llvm_memset_p0_i64(char* dst, char elem, int sz, int flag){}</span></div>
837
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0_i64&quot;</span>] = {{0, 2}};</div>
838
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">//char *__memset_chk(char * dest, int c, unsigned long destlen, int flag)</span></div>
839
+ <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memset_chk&quot;</span>] = {{0, 2}};</div>
840
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">//char *wmemset(wchar_t * dst, wchar_t elem, int sz, int flag) {</span></div>
841
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;wmemset&quot;</span>] = {{0, 2}};</div>
842
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">//char *strncpy(char *dest, const char *src, unsigned long n)</span></div>
843
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;strncpy&quot;</span>] = {{0, 2}, {1,2}};</div>
844
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">//unsigned long iconv(void* cd, char **restrict inbuf, unsigned long *restrict inbytesleft, char **restrict outbuf, unsigned long *restrict outbytesleft)</span></div>
845
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;iconv&quot;</span>] = {{1, 2}, {3, 4}};</div>
846
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div>
846
847
  </div><!-- fragment -->
847
848
  </div>
848
849
  </div>
@@ -871,246 +872,249 @@ Additional Inherited Members</h2></td></tr>
871
872
  <p>the map of external function to its API type</p>
872
873
  <p>it initialize the ext apis about buffer overflow checking </p>
873
874
 
874
- <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractExecution.html#a5715b1a5994715f19b17687b9e91d7c8">SVF::AbstractExecution</a>.</p>
875
+ <p>Reimplemented from <a class="el" href="classSVF_1_1AbstractInterpretation.html#ab18fe64117c1692d94ce0e0ee44e940b">SVF::AbstractInterpretation</a>.</p>
875
876
 
876
- <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00133">133</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
877
- <div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
878
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
879
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> sse_scanf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
880
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
881
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">//scanf(&quot;%d&quot;, &amp;data);</span></div>
882
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
883
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
884
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
885
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
886
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
887
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; BufOverflowException bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(1));</div>
888
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
889
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span>;</div>
890
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
891
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">else</span></div>
892
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div>
893
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
894
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
895
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div>
896
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
897
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; IntervalValue range = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
898
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; es.store(vaddr, range);</div>
899
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
900
- <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
901
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; };</div>
902
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">auto</span> sse_fscanf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
903
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div>
904
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">//fscanf(stdin, &quot;%d&quot;, &amp;data);</span></div>
905
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
906
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
907
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
908
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
909
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {</div>
910
- <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; BufOverflowException bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(2));</div>
911
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
912
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span>;</div>
913
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
914
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span></div>
915
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div>
916
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
917
- <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
918
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div>
919
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
920
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; IntervalValue range = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
921
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; es.store(vaddr, range);</div>
922
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
923
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div>
924
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; };</div>
925
- <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
926
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__isoc99_fscanf&quot;</span>] = sse_fscanf;</div>
927
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__isoc99_scanf&quot;</span>] = sse_scanf;</div>
928
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__isoc99_vscanf&quot;</span>] = sse_scanf;</div>
929
- <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;fscanf&quot;</span>] = sse_fscanf;</div>
930
- <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;scanf&quot;</span>] = sse_scanf;</div>
931
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;sscanf&quot;</span>] = sse_scanf;</div>
932
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__isoc99_sscanf&quot;</span>] = sse_scanf;</div>
933
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;vscanf&quot;</span>] = sse_scanf;</div>
934
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
935
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">auto</span> sse_fread = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
936
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
937
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
938
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
939
- <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_count_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
940
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
941
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; IntervalValue block_count = es[block_count_id];</div>
942
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; IntervalValue block_size = es[block_size_id];</div>
943
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; IntervalValue block_byte = block_count * block_size;</div>
944
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), block_byte, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
945
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; };</div>
946
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;fread&quot;</span>] = sse_fread;</div>
947
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
948
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">auto</span> sse_sprintf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
949
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
950
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// printf is difficult to predict since it has no byte size arguments</span></div>
951
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; };</div>
952
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
953
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">auto</span> sse_snprintf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
954
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
955
- <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
956
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
957
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
958
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
959
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// get elem size of arg2</span></div>
960
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
961
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isArrayTy())</div>
962
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div>
963
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(cs.getArgument(2)-&gt;getType())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
964
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
965
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isPointerTy())</div>
966
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
967
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; elemSize = <a class="code" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2)))-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
968
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
969
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">else</span></div>
970
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
971
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span>;</div>
972
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// assert(false &amp;&amp; &quot;we cannot support this type&quot;);</span></div>
973
- <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
974
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; IntervalValue size = es[size_id] * IntervalValue(elemSize) - IntervalValue(1);</div>
975
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (!es.inVarToAddrsTable(dst_id))</div>
976
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div>
977
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">Options::BufferOverflowCheck</a>())</div>
978
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div>
979
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; BufOverflowException bug(</div>
980
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="stringliteral">&quot;snprintf dst_id or dst is not defined nor initializesd.\n&quot;</span>,</div>
981
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; 0, 0, 0, 0, cs.getArgument(0));</div>
982
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
983
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span>;</div>
984
- <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
985
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
986
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), size, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
987
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; };</div>
988
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__snprintf_chk&quot;</span>] = sse_snprintf;</div>
989
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__vsprintf_chk&quot;</span>] = sse_sprintf;</div>
990
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__sprintf_chk&quot;</span>] = sse_sprintf;</div>
991
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;snprintf&quot;</span>] = sse_snprintf;</div>
992
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;sprintf&quot;</span>] = sse_sprintf;</div>
993
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;vsprintf&quot;</span>] = sse_sprintf;</div>
994
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;vsnprintf&quot;</span>] = sse_snprintf;</div>
995
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__vsnprintf_chk&quot;</span>] = sse_snprintf;</div>
996
- <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;swprintf&quot;</span>] = sse_snprintf;</div>
997
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;_snwprintf&quot;</span>] = sse_snprintf;</div>
998
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
877
+ <p class="definition">Definition at line <a class="el" href="BufOverflowChecker_8cpp_source.html#l00134">134</a> of file <a class="el" href="BufOverflowChecker_8cpp_source.html">BufOverflowChecker.cpp</a>.</p>
878
+ <div class="fragment"><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;{</div>
879
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
880
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">auto</span> sse_scanf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
881
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div>
882
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">//scanf(&quot;%d&quot;, &amp;data);</span></div>
883
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
884
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
885
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
886
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a62baa9403069a9b1e010eaeb2f6b9b34">inVarToAddrsTable</a>(dst_id))</div>
887
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
888
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; BufOverflowException bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(1));</div>
889
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
890
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span>;</div>
891
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
892
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">else</span></div>
893
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
894
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; AbstractValue Addrs = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#aa3e62b9ef912def502b95992199f5d8c">getAddrs</a>(dst_id);</div>
895
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs.getAddrs())</div>
896
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
897
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#ac37760566b534d89a61d789b00efb993">getInternalID</a>(vaddr);</div>
898
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; AbstractValue range = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a4e032a5e0898f0e349927d5a86c8477c">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
899
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; es.store(vaddr, range);</div>
900
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
901
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
902
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; };</div>
903
+ <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">auto</span> sse_fscanf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
904
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
905
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">//fscanf(stdin, &quot;%d&quot;, &amp;data);</span></div>
906
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
907
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
908
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
909
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a62baa9403069a9b1e010eaeb2f6b9b34">inVarToAddrsTable</a>(dst_id))</div>
910
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
911
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; BufOverflowException bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(2));</div>
912
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
913
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span>;</div>
914
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
915
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">else</span></div>
916
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {</div>
917
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; AbstractValue Addrs = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#aa3e62b9ef912def502b95992199f5d8c">getAddrs</a>(dst_id);</div>
918
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs.getAddrs())</div>
919
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div>
920
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> objId = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#ac37760566b534d89a61d789b00efb993">getInternalID</a>(vaddr);</div>
921
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; AbstractValue range = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a4e032a5e0898f0e349927d5a86c8477c">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(objId)-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">getType</a>());</div>
922
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; es.store(vaddr, range);</div>
923
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; }</div>
924
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
925
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; };</div>
926
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
927
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__isoc99_fscanf&quot;</span>] = sse_fscanf;</div>
928
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__isoc99_scanf&quot;</span>] = sse_scanf;</div>
929
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__isoc99_vscanf&quot;</span>] = sse_scanf;</div>
930
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;fscanf&quot;</span>] = sse_fscanf;</div>
931
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;scanf&quot;</span>] = sse_scanf;</div>
932
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;sscanf&quot;</span>] = sse_scanf;</div>
933
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__isoc99_sscanf&quot;</span>] = sse_scanf;</div>
934
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;vscanf&quot;</span>] = sse_scanf;</div>
935
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
936
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> sse_fread = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
937
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div>
938
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
939
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
940
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_count_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
941
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> block_size_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
942
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; AbstractValue block_count = es[block_count_id];</div>
943
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; AbstractValue block_size = es[block_size_id];</div>
944
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; AbstractValue block_byte = block_count * block_size;</div>
945
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(0), block_byte, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
946
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; };</div>
947
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;fread&quot;</span>] = sse_fread;</div>
948
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
949
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">auto</span> sse_sprintf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
950
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; {</div>
951
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// printf is difficult to predict since it has no byte size arguments</span></div>
952
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; };</div>
953
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
954
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">auto</span> sse_snprintf = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
955
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
956
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
957
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
958
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
959
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
960
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// get elem size of arg2</span></div>
961
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
962
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isArrayTy())</div>
963
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
964
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(cs.getArgument(2)-&gt;getType())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
965
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div>
966
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isPointerTy())</div>
967
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
968
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; elemSize = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2)))-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
969
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
970
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">else</span></div>
971
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
972
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span>;</div>
973
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// assert(false &amp;&amp; &quot;we cannot support this type&quot;);</span></div>
974
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
975
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; AbstractValue size = es[size_id] * IntervalValue(elemSize) - IntervalValue(1);</div>
976
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (!es.inVarToAddrsTable(dst_id))</div>
977
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div>
978
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">Options::BufferOverflowCheck</a>())</div>
979
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
980
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; BufOverflowException bug(</div>
981
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="stringliteral">&quot;snprintf dst_id or dst is not defined nor initializesd.\n&quot;</span>,</div>
982
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; 0, 0, 0, 0, cs.getArgument(0));</div>
983
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
984
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span>;</div>
985
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
986
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div>
987
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(0), size, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
988
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; };</div>
989
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__snprintf_chk&quot;</span>] = sse_snprintf;</div>
990
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__vsprintf_chk&quot;</span>] = sse_sprintf;</div>
991
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__sprintf_chk&quot;</span>] = sse_sprintf;</div>
992
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;snprintf&quot;</span>] = sse_snprintf;</div>
993
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;sprintf&quot;</span>] = sse_sprintf;</div>
994
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;vsprintf&quot;</span>] = sse_sprintf;</div>
995
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;vsnprintf&quot;</span>] = sse_snprintf;</div>
996
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__vsnprintf_chk&quot;</span>] = sse_snprintf;</div>
997
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;swprintf&quot;</span>] = sse_snprintf;</div>
998
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;_snwprintf&quot;</span>] = sse_snprintf;</div>
999
999
  <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
1000
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">auto</span> sse_itoa = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1001
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
1002
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// itoa(num, ch, 10);</span></div>
1003
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// num: int, ch: char*, 10 is decimal</span></div>
1004
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
1005
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
1006
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
1007
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
1008
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) es[num_id].getNumeral();</div>
1009
- <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> snum = std::to_string(num);</div>
1010
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(1), IntervalValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)snum.size()), <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1011
- <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; };</div>
1012
- <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;itoa&quot;</span>] = sse_itoa;</div>
1013
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
1000
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
1001
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">auto</span> sse_itoa = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1002
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
1003
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// itoa(num, ch, 10);</span></div>
1004
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// num: int, ch: char*, 10 is decimal</span></div>
1005
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
1006
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
1007
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
1008
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
1009
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) es[num_id].getInterval().getNumeral();</div>
1010
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> snum = std::to_string(num);</div>
1011
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(1), AbstractValue((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)snum.size()), <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1012
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; };</div>
1013
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;itoa&quot;</span>] = sse_itoa;</div>
1014
1014
  <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; </div>
1015
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">auto</span> sse_strlen = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1016
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div>
1017
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// check the arg size</span></div>
1018
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 1) <span class="keywordflow">return</span>;</div>
1019
- <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">const</span> SVFValue* strValue = cs.getArgument(0);</div>
1020
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
1021
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; IntervalValue dst_size = <a class="code" href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">getStrlen</a>(strValue);</div>
1022
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
1023
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (strValue-&gt;getType()-&gt;isArrayTy())</div>
1024
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
1025
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(strValue-&gt;getType())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1026
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
1027
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue-&gt;getType()-&gt;isPointerTy())</div>
1028
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
1029
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; elemSize = <a class="code" href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(strValue))-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
1030
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
1031
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
1032
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; es[lhsId] = dst_size / IntervalValue(elemSize);</div>
1033
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; };</div>
1034
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;strlen&quot;</span>] = sse_strlen;</div>
1035
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;wcslen&quot;</span>] = sse_strlen;</div>
1036
- <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
1037
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">auto</span> sse_recv = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1038
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div>
1039
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// recv(sockfd, buf, len, flags);</span></div>
1040
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 4) <span class="keywordflow">return</span>;</div>
1041
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
1042
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> len_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
1043
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; IntervalValue len = es[len_id] - IntervalValue(1);</div>
1044
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
1045
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; es[lhsId] = len;</div>
1046
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(1), len, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));;</div>
1047
- <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; };</div>
1048
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;recv&quot;</span>] = sse_recv;</div>
1049
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;__recv&quot;</span>] = sse_recv;</div>
1050
- <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keyword">auto</span> safe_bufaccess = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1051
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
1052
- <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1053
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a>.erase(callNode);</div>
1054
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">//void SAFE_BUFACCESS(void* data, int size);</span></div>
1055
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1056
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
1057
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
1058
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; IntervalValue val = es[size_id];</div>
1059
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (val.isBottom())</div>
1060
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
1061
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; val = IntervalValue(0);</div>
1062
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;SAFE_BUFACCESS size is bottom&quot;</span>);</div>
1063
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div>
1064
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1065
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (isSafe)</div>
1066
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div>
1067
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;safe buffer access success\n&quot;</span>;</div>
1068
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span>;</div>
1069
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div>
1070
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">else</span></div>
1071
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; {</div>
1072
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">&quot;this SAFE_BUFACCESS should be a safe access but detected buffer overflow. Pos: &quot;</span>;</div>
1073
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
1074
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
1075
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; assert(<span class="keyword">false</span>);</div>
1076
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
1077
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; };</div>
1078
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>] = safe_bufaccess;</div>
1079
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
1080
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">auto</span> unsafe_bufaccess = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1081
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div>
1082
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1083
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">_checkpoints</a>.erase(callNode);</div>
1084
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">//void UNSAFE_BUFACCESS(void* data, int size);</span></div>
1085
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1086
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; IntervalExeState &amp;es = <a class="code" href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
1087
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
1088
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; IntervalValue val = es[size_id];</div>
1089
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (val.isBottom())</div>
1090
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div>
1091
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;UNSAFE_BUFACCESS size is bottom&quot;</span>);</div>
1092
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
1093
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1094
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (!isSafe)</div>
1095
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div>
1096
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;detect buffer overflow success\n&quot;</span>;</div>
1097
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span>;</div>
1098
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div>
1099
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">else</span></div>
1100
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div>
1101
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// if it is safe, it means it is wrongly labeled, assert false.</span></div>
1102
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">&quot;this UNSAFE_BUFACCESS should be a buffer overflow but not detected. Pos: &quot;</span>;</div>
1103
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
1104
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
1105
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; assert(<span class="keyword">false</span>);</div>
1106
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
1107
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; };</div>
1108
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">_func_map</a>[<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>] = unsafe_bufaccess;</div>
1109
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
1110
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// init _checkpoint_names</span></div>
1111
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>);</div>
1112
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>);</div>
1113
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;}</div>
1015
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
1016
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keyword">auto</span> sse_strlen = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1017
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
1018
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// check the arg size</span></div>
1019
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 1) <span class="keywordflow">return</span>;</div>
1020
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> SVFValue* strValue = cs.getArgument(0);</div>
1021
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
1022
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; AbstractValue dst_size = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">getStrlen</a>(strValue);</div>
1023
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> elemSize = 1;</div>
1024
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">if</span> (strValue-&gt;getType()-&gt;isArrayTy())</div>
1025
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div>
1026
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(strValue-&gt;getType())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
1027
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
1028
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue-&gt;getType()-&gt;isPointerTy())</div>
1029
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
1030
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> SVFType* pointee = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">getPointeeElement</a>(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(strValue)))</div>
1031
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; elemSize = pointee-&gt;getByteSize();</div>
1032
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">else</span></div>
1033
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; elemSize = 1;</div>
1034
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
1035
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
1036
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; es[lhsId] = dst_size / IntervalValue(elemSize);</div>
1037
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; };</div>
1038
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;strlen&quot;</span>] = sse_strlen;</div>
1039
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;wcslen&quot;</span>] = sse_strlen;</div>
1040
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
1041
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">auto</span> sse_recv = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1042
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div>
1043
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// recv(sockfd, buf, len, flags);</span></div>
1044
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 4) <span class="keywordflow">return</span>;</div>
1045
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
1046
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> len_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
1047
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; AbstractValue len = es[len_id] - IntervalValue(1);</div>
1048
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
1049
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; es[lhsId] = len;</div>
1050
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(1), len, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));;</div>
1051
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; };</div>
1052
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;recv&quot;</span>] = sse_recv;</div>
1053
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;__recv&quot;</span>] = sse_recv;</div>
1054
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">auto</span> safe_bufaccess = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1055
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
1056
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1057
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a219313e979d779221116c1bc45becc1b">_checkpoints</a>.erase(callNode);</div>
1058
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">//void SAFE_BUFACCESS(void* data, int size);</span></div>
1059
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1060
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
1061
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
1062
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; AbstractValue val = es[size_id];</div>
1063
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (val.isBottom())</div>
1064
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
1065
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; val = IntervalValue(0);</div>
1066
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;SAFE_BUFACCESS size is bottom&quot;</span>);</div>
1067
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
1068
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1069
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (isSafe)</div>
1070
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div>
1071
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;safe buffer access success\n&quot;</span>;</div>
1072
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span>;</div>
1073
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
1074
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">else</span></div>
1075
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
1076
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">&quot;this SAFE_BUFACCESS should be a safe access but detected buffer overflow. Pos: &quot;</span>;</div>
1077
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
1078
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
1079
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; assert(<span class="keyword">false</span>);</div>
1080
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
1081
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; };</div>
1082
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>] = safe_bufaccess;</div>
1083
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
1084
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">auto</span> unsafe_bufaccess = [&amp;](<span class="keyword">const</span> CallSite &amp;cs)</div>
1085
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div>
1086
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">const</span> CallICFGNode* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1087
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a219313e979d779221116c1bc45becc1b">_checkpoints</a>.erase(callNode);</div>
1088
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">//void UNSAFE_BUFACCESS(void* data, int size);</span></div>
1089
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
1090
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; SparseAbstractState&amp;es = <a class="code" href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">getEs</a>();</div>
1091
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> size_id = <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
1092
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; AbstractValue val = es[size_id];</div>
1093
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (val.isBottom())</div>
1094
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; {</div>
1095
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;UNSAFE_BUFACCESS size is bottom&quot;</span>);</div>
1096
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
1097
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">_svfir</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(cs.getInstruction()));</div>
1098
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (!isSafe)</div>
1099
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
1100
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;detect buffer overflow success\n&quot;</span>;</div>
1101
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">return</span>;</div>
1102
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
1103
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">else</span></div>
1104
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
1105
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="comment">// if it is safe, it means it is wrongly labeled, assert false.</span></div>
1106
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> err_msg = <span class="stringliteral">&quot;this UNSAFE_BUFACCESS should be a buffer overflow but not detected. Pos: &quot;</span>;</div>
1107
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
1108
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
1109
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; assert(<span class="keyword">false</span>);</div>
1110
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
1111
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; };</div>
1112
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">_func_map</a>[<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>] = unsafe_bufaccess;</div>
1113
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; </div>
1114
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// init _checkpoint_names</span></div>
1115
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2a1e1b72ed740cef4c3e57e3e32c3f75">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>);</div>
1116
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="classSVF_1_1AbstractInterpretation.html#a2a1e1b72ed740cef4c3e57e3e32c3f75">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>);</div>
1117
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;}</div>
1114
1118
  </div><!-- fragment -->
1115
1119
  </div>
1116
1120
  </div>
@@ -1169,53 +1173,53 @@ Additional Inherited Members</h2></td></tr>
1169
1173
  </ul>
1170
1174
  </div><!-- contents -->
1171
1175
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a95b8031f1e15d49c7d68628be1d05aae"><div class="ttname"><a href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">SVF::SVFType::getByteSize</a></div><div class="ttdeci">u32_t getByteSize() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00244">SVFType.h:244</a></div></div>
1172
- <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_afbb9ff1f2c47d2afda117bf63a80a1a7"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">SVF::SVFIR2ItvExeState::getRangeLimitFromType</a></div><div class="ttdeci">IntervalValue getRangeLimitFromType(const SVFType *type)</div><div class="ttdoc">Return the value range of Integer SVF Type, e.g. unsigned i8 Type-&gt;[0, 255], signed i8 Type-&gt;[-128,...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00050">SVFIR2ItvExeState.cpp:50</a></div></div>
1173
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ad36d48c0ef82de915d9339c4f47cbd70"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ad36d48c0ef82de915d9339c4f47cbd70">SVF::AbstractExecution::_kind</a></div><div class="ttdeci">AEKind _kind</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00349">AbstractExecution.h:349</a></div></div>
1174
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a99be86146ad4ddbdb900cdb6b324f943"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a99be86146ad4ddbdb900cdb6b324f943">SVF::AbstractExecution::getStrlen</a></div><div class="ttdeci">IntervalValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01495">AbstractExecution.cpp:1495</a></div></div>
1176
+ <div class="ttc" id="aclassSVF_1_1SVFIR2AbsState_html_a62baa9403069a9b1e010eaeb2f6b9b34"><div class="ttname"><a href="classSVF_1_1SVFIR2AbsState.html#a62baa9403069a9b1e010eaeb2f6b9b34">SVF::SVFIR2AbsState::inVarToAddrsTable</a></div><div class="ttdeci">bool inVarToAddrsTable(u32_t id) const</div><div class="ttdoc">whether the variable is in varToAddrs table</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2AbsState_8h_source.html#l00129">SVFIR2AbsState.h:129</a></div></div>
1175
1177
  <div class="ttc" id="aCommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
1176
- <div class="ttc" id="aclassSVF_1_1ExeState_html_a78038dd4884a501cfc94f073021eac96"><div class="ttname"><a href="classSVF_1_1ExeState.html#a78038dd4884a501cfc94f073021eac96">SVF::ExeState::Addrs</a></div><div class="ttdeci">AddressValue Addrs</div><div class="ttdef"><b>Definition:</b> <a href="ExeState_8h_source.html#l00053">ExeState.h:53</a></div></div>
1178
+ <div class="ttc" id="astructSVF_1_1AbstractValue_html_ab1fe6a57f784971b3bc603dbfda746e8"><div class="ttname"><a href="structSVF_1_1AbstractValue.html#ab1fe6a57f784971b3bc603dbfda746e8">SVF::AbstractValue::getAddrs</a></div><div class="ttdeci">AddressValue &amp; getAddrs()</div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00171">AbstractValue.h:171</a></div></div>
1179
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ad68fa02efad8b628e4542dc9ab6c58bf"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ad68fa02efad8b628e4542dc9ab6c58bf">SVF::BufOverflowChecker::canSafelyAccessMemory</a></div><div class="ttdeci">bool canSafelyAccessMemory(const SVFValue *value, const AbstractValue &amp;len, const ICFGNode *curNode)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00489">BufOverflowChecker.cpp:489</a></div></div>
1177
1180
  <div class="ttc" id="aclassSVF_1_1IRGraph_html_a43514023a4f4d0c32f536f51443b0efc"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const SVFValue *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00137">IRGraph.h:137</a></div></div>
1178
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa12d7009fd0108df805ee49182fe12ccc">SVF::AbstractExecution::UNCLASSIFIED</a></div><div class="ttdeci">@ UNCLASSIFIED</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1181
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a5bba3c0570d73acc743742a30af1b0b4"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a5bba3c0570d73acc743742a30af1b0b4">SVF::AbstractInterpretation::getStrlen</a></div><div class="ttdeci">AbstractValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01498">AbstractInterpretation.cpp:1498</a></div></div>
1179
1182
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
1180
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a5e24bceb3d6961117651dbc65e9a097a"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a5e24bceb3d6961117651dbc65e9a097a">SVF::AbstractExecution::_svfir2ExeState</a></div><div class="ttdeci">SVFIR2ItvExeState * _svfir2ExeState</div><div class="ttdoc">Execution State, used to store the Interval Value of every SVF variable.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00344">AbstractExecution.h:344</a></div></div>
1181
- <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ad8b2f2fa6f22b9d1655135c819cbad8a"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">SVF::BufOverflowChecker::detectStrcpy</a></div><div class="ttdeci">bool detectStrcpy(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00123">BufOverflowChecker.cpp:123</a></div></div>
1183
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a5d3b15c3cdb9c8e91b942924bf8aee21"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a5d3b15c3cdb9c8e91b942924bf8aee21">SVF::AbstractInterpretation::_kind</a></div><div class="ttdeci">AEKind _kind</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00350">AbstractInterpretation.h:350</a></div></div>
1184
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ad8b2f2fa6f22b9d1655135c819cbad8a"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ad8b2f2fa6f22b9d1655135c819cbad8a">SVF::BufOverflowChecker::detectStrcpy</a></div><div class="ttdeci">bool detectStrcpy(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00124">BufOverflowChecker.cpp:124</a></div></div>
1185
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_af78f068a373ebb6a2f14dcde980a9dae"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#af78f068a373ebb6a2f14dcde980a9dae">SVF::AbstractInterpretation::_svfir2ExeState</a></div><div class="ttdeci">SVFIR2AbsState * _svfir2ExeState</div><div class="ttdoc">Execution State, used to store the Interval Value of every SVF variable.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00345">AbstractInterpretation.h:345</a></div></div>
1186
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616daad20658cd0f68b92583461b0b1f68d543"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daad20658cd0f68b92583461b0b1f68d543">SVF::AbstractInterpretation::UNCLASSIFIED</a></div><div class="ttdeci">@ UNCLASSIFIED</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1182
1187
  <div class="ttc" id="anamespaceSVF_html_a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd"><div class="ttname"><a href="namespaceSVF.html#a41375daa7cc99317d0aa2a21dc643b88aa5aa2ddadb5f0392b52dcbe487fe0ecd">SVF::AEKind::BufOverflowChecker</a></div><div class="ttdeci">@ BufOverflowChecker</div></div>
1183
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a32abc52bc54745027aa2daa67a8278f3"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a32abc52bc54745027aa2daa67a8278f3">SVF::AbstractExecution::_checkpoint_names</a></div><div class="ttdeci">Set&lt; std::string &gt; _checkpoint_names</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00384">AbstractExecution.h:384</a></div></div>
1184
- <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a48fec38aad1c2a9a140ee94e9fdd7e9b"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">SVF::SVFIR2ItvExeState::getAddrs</a></div><div class="ttdeci">Addrs &amp; getAddrs(u32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00116">SVFIR2ItvExeState.h:116</a></div></div>
1185
- <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aed959fce840cbea32d3567ee1ac01e82"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">SVF::BufOverflowChecker::initExtAPIBufOverflowCheckRules</a></div><div class="ttdeci">void initExtAPIBufOverflowCheckRules()</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00076">BufOverflowChecker.cpp:76</a></div></div>
1186
- <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aa68f8aef09481d7c07dc59d7dfb83822"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">SVF::BufOverflowChecker::detectStrcat</a></div><div class="ttdeci">bool detectStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00372">BufOverflowChecker.cpp:372</a></div></div>
1188
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616daa93c9b2a9dc4bdfba5a7b23cfa5f80ccb"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa93c9b2a9dc4bdfba5a7b23cfa5f80ccb">SVF::AbstractInterpretation::STRCPY</a></div><div class="ttdeci">@ STRCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1189
+ <div class="ttc" id="aclassSVF_1_1SVFIR2AbsState_html_a4e032a5e0898f0e349927d5a86c8477c"><div class="ttname"><a href="classSVF_1_1SVFIR2AbsState.html#a4e032a5e0898f0e349927d5a86c8477c">SVF::SVFIR2AbsState::getRangeLimitFromType</a></div><div class="ttdeci">AbstractValue getRangeLimitFromType(const SVFType *type)</div><div class="ttdoc">Return the value range of Integer SVF Type, e.g. unsigned i8 Type-&gt;[0, 255], signed i8 Type-&gt;[-128,...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2AbsState_8cpp_source.html#l00049">SVFIR2AbsState.cpp:49</a></div></div>
1190
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a618fc324a6c205d7e1b471bd850377a9"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a618fc324a6c205d7e1b471bd850377a9">SVF::AbstractInterpretation::_svfir</a></div><div class="ttdeci">SVFIR * _svfir</div><div class="ttdoc">protected data members, also used in subclasses</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00342">AbstractInterpretation.h:342</a></div></div>
1191
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2a1e1b72ed740cef4c3e57e3e32c3f75"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2a1e1b72ed740cef4c3e57e3e32c3f75">SVF::AbstractInterpretation::_checkpoint_names</a></div><div class="ttdeci">Set&lt; std::string &gt; _checkpoint_names</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00385">AbstractInterpretation.h:385</a></div></div>
1192
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aed959fce840cbea32d3567ee1ac01e82"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aed959fce840cbea32d3567ee1ac01e82">SVF::BufOverflowChecker::initExtAPIBufOverflowCheckRules</a></div><div class="ttdeci">void initExtAPIBufOverflowCheckRules()</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00077">BufOverflowChecker.cpp:77</a></div></div>
1193
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_aa68f8aef09481d7c07dc59d7dfb83822"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#aa68f8aef09481d7c07dc59d7dfb83822">SVF::BufOverflowChecker::detectStrcat</a></div><div class="ttdeci">bool detectStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00376">BufOverflowChecker.cpp:376</a></div></div>
1194
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a4080994b793d9510c00cb3a0260e0a61"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a4080994b793d9510c00cb3a0260e0a61">SVF::AbstractInterpretation::AbstractInterpretation</a></div><div class="ttdeci">AbstractInterpretation()</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00123">AbstractInterpretation.cpp:123</a></div></div>
1187
1195
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00241">SVFUtil.h:241</a></div></div>
1188
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a1d725fe50a7084bfa18bd47b941af885"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a1d725fe50a7084bfa18bd47b941af885">SVF::AbstractExecution::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l00866">AbstractExecution.cpp:866</a></div></div>
1189
- <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a66c426719f583653cb70189f01d6fda5"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">SVF::SVFIR2ItvExeState::getInternalID</a></div><div class="ttdeci">static u32_t getInternalID(u32_t idx)</div><div class="ttdoc">Return the internal index if idx is an address otherwise return the value of idx.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00175">SVFIR2ItvExeState.h:175</a></div></div>
1190
1196
  <div class="ttc" id="acJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
1191
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a888fd56160afe0d431c47bcf10674dc0"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a888fd56160afe0d431c47bcf10674dc0">SVF::AbstractExecution::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01642">AbstractExecution.cpp:1642</a></div></div>
1197
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616daa9cc269dadf9cff7d399c54d9570a6614"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa9cc269dadf9cff7d399c54d9570a6614">SVF::AbstractInterpretation::MEMCPY</a></div><div class="ttdeci">@ MEMCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1192
1198
  <div class="ttc" id="aclassSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node.</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00092">ICFG.h:92</a></div></div>
1193
- <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_ace5ad1d6a63d5392044fee2ecbc9236e"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#ace5ad1d6a63d5392044fee2ecbc9236e">SVF::BufOverflowChecker::canSafelyAccessMemory</a></div><div class="ttdeci">bool canSafelyAccessMemory(const SVFValue *value, const IntervalValue &amp;len, const ICFGNode *curNode)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00485">BufOverflowChecker.cpp:485</a></div></div>
1194
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a0a64bef0cc898059c50f6aec470cc6d9"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a0a64bef0cc898059c50f6aec470cc6d9">SVF::AbstractExecution::_checkpoints</a></div><div class="ttdeci">Set&lt; const CallICFGNode * &gt; _checkpoints</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00383">AbstractExecution.h:383</a></div></div>
1195
1199
  <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_af83b65ed98cd4e0f6cd92962e7392d4d"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#af83b65ed98cd4e0f6cd92962e7392d4d">SVF::BufOverflowChecker::_extAPIBufOverflowCheckRules</a></div><div class="ttdeci">Map&lt; std::string, std::vector&lt; std::pair&lt; u32_t, u32_t &gt; &gt; &gt; _extAPIBufOverflowCheckRules</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00202">BufOverflowChecker.h:202</a></div></div>
1196
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ac1742440725909fee77526726424d135"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ac1742440725909fee77526726424d135">SVF::AbstractExecution::_func_map</a></div><div class="ttdeci">Map&lt; std::string, std::function&lt; void(const CallSite &amp;)&gt; &gt; _func_map</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00382">AbstractExecution.h:382</a></div></div>
1200
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a6cac9b69d85111a5a26373ec848a3282"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a6cac9b69d85111a5a26373ec848a3282">SVF::AbstractInterpretation::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01217">AbstractInterpretation.cpp:1217</a></div></div>
1197
1201
  <div class="ttc" id="aclassSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00406">GenericGraph.h:406</a></div></div>
1198
1202
  <div class="ttc" id="aclassSVF_1_1Options_html_afbe432aabda95308e2c190a04d227a6d"><div class="ttname"><a href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">SVF::Options::BufferOverflowCheck</a></div><div class="ttdeci">static const Option&lt; bool &gt; BufferOverflowCheck</div><div class="ttdoc">buffer overflow checker, Default: false</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00271">Options.h:271</a></div></div>
1199
1203
  <div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00047">GeneralType.h:47</a></div></div>
1200
1204
  <div class="ttc" id="aclassSVF_1_1SVFIR_html_abda052b73e869ed6d7c139ad1528da11"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abda052b73e869ed6d7c139ad1528da11">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00170">SVFIR.h:170</a></div></div>
1205
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616da"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616da">SVF::AbstractInterpretation::ExtAPIType</a></div><div class="ttdeci">ExtAPIType</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1206
+ <div class="ttc" id="aclassSVF_1_1SVFIR2AbsState_html_aa3e62b9ef912def502b95992199f5d8c"><div class="ttname"><a href="classSVF_1_1SVFIR2AbsState.html#aa3e62b9ef912def502b95992199f5d8c">SVF::SVFIR2AbsState::getAddrs</a></div><div class="ttdeci">AbstractValue &amp; getAddrs(u32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2AbsState_8h_source.html#l00113">SVFIR2AbsState.h:113</a></div></div>
1201
1207
  <div class="ttc" id="acJSON_8cpp_html_a95bf816579e97b6f33bdb5e25ed6d5de"><div class="ttname"><a href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a></div><div class="ttdeci">buffer offset</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l01113">cJSON.cpp:1113</a></div></div>
1202
- <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_af0e2276001df7d51c45b22d5d11ca09b"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">SVF::BufOverflowChecker::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap() override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00133">BufOverflowChecker.cpp:133</a></div></div>
1203
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a84d8fedb7e9d23e92ffcb74b4cfbf78c"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a84d8fedb7e9d23e92ffcb74b4cfbf78c">SVF::AbstractExecution::AbstractExecution</a></div><div class="ttdeci">AbstractExecution()</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l00123">AbstractExecution.cpp:123</a></div></div>
1204
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a49742e8c3a8fe598a0945a8d8ff394d0"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a49742e8c3a8fe598a0945a8d8ff394d0">SVF::AbstractExecution::_svfir</a></div><div class="ttdeci">SVFIR * _svfir</div><div class="ttdoc">protected data members, also used in subclasses</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00341">AbstractExecution.h:341</a></div></div>
1205
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa45836a81adf553b872a061e5fe4c5be8">SVF::AbstractExecution::MEMSET</a></div><div class="ttdeci">@ MEMSET</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1206
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afa622ab5082468499be675c2783aaf3dcf">SVF::AbstractExecution::MEMCPY</a></div><div class="ttdeci">@ MEMCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1207
- <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a56434326130c8127c823097ad764947b"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">SVF::SVFIR2ItvExeState::getEs</a></div><div class="ttdeci">IntervalExeState &amp; getEs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00057">SVFIR2ItvExeState.h:57</a></div></div>
1208
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afac9539311eec734c966b719990e869b12">SVF::AbstractExecution::STRCPY</a></div><div class="ttdeci">@ STRCPY</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1209
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43af"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43af">SVF::AbstractExecution::ExtAPIType</a></div><div class="ttdeci">ExtAPIType</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1208
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_af0e2276001df7d51c45b22d5d11ca09b"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#af0e2276001df7d51c45b22d5d11ca09b">SVF::BufOverflowChecker::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap() override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00134">BufOverflowChecker.cpp:134</a></div></div>
1209
+ <div class="ttc" id="aclassSVF_1_1SVFIR2AbsState_html_a260c4ccfd79a2b9dbd580fa2030ac238"><div class="ttname"><a href="classSVF_1_1SVFIR2AbsState.html#a260c4ccfd79a2b9dbd580fa2030ac238">SVF::SVFIR2AbsState::getEs</a></div><div class="ttdeci">SparseAbstractState &amp; getEs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2AbsState_8h_source.html#l00054">SVFIR2AbsState.h:54</a></div></div>
1210
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a896d04a02951947bc228bf97b2c00313"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a896d04a02951947bc228bf97b2c00313">SVF::AbstractInterpretation::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l00872">AbstractInterpretation.cpp:872</a></div></div>
1211
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616daae8dad405c06383859d8db715fd455317"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daae8dad405c06383859d8db715fd455317">SVF::AbstractInterpretation::STRCAT</a></div><div class="ttdeci">@ STRCAT</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1212
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a13fdb4a6a6d09e3504fdad16b88616daa5aec33226dc590ec951d0f12bf35f15f"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a13fdb4a6a6d09e3504fdad16b88616daa5aec33226dc590ec951d0f12bf35f15f">SVF::AbstractInterpretation::MEMSET</a></div><div class="ttdeci">@ MEMSET</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00113">AbstractInterpretation.h:113</a></div></div>
1210
1213
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1211
1214
  <div class="ttc" id="aclassSVF_1_1SVFVar_html_ab6f95d3e7e099d75cfc9645ebc037047"><div class="ttname"><a href="classSVF_1_1SVFVar.html#ab6f95d3e7e099d75cfc9645ebc037047">SVF::SVFVar::getType</a></div><div class="ttdeci">virtual const SVFType * getType() const</div><div class="ttdoc">Return type of the value.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00107">SVFVariables.h:107</a></div></div>
1215
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a2057e8e1c0aaf39e74f0a8fb2a1b580c"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a2057e8e1c0aaf39e74f0a8fb2a1b580c">SVF::AbstractInterpretation::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8cpp_source.html#l01649">AbstractInterpretation.cpp:1649</a></div></div>
1212
1216
  <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a0088456e712c555cbfba6203aec38037"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a0088456e712c555cbfba6203aec38037">SVF::BufOverflowChecker::_addrToGep</a></div><div class="ttdeci">Map&lt; NodeID, const GepStmt * &gt; _addrToGep</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00201">BufOverflowChecker.h:201</a></div></div>
1213
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#a442fb8eda087f72aa61816213dea43afadcda19decab7b2d85523b1fdbceb23e6">SVF::AbstractExecution::STRCAT</a></div><div class="ttdeci">@ STRCAT</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8h_source.html#l00114">AbstractExecution.h:114</a></div></div>
1217
+ <div class="ttc" id="aclassSVF_1_1SVFIR2AbsState_html_ac37760566b534d89a61d789b00efb993"><div class="ttname"><a href="classSVF_1_1SVFIR2AbsState.html#ac37760566b534d89a61d789b00efb993">SVF::SVFIR2AbsState::getInternalID</a></div><div class="ttdeci">static u32_t getInternalID(u32_t idx)</div><div class="ttdoc">Return the internal index if idx is an address otherwise return the value of idx.</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2AbsState_8h_source.html#l00172">SVFIR2AbsState.h:172</a></div></div>
1218
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_aa27d0ef684deec1f5385fdb0d4c64827"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#aa27d0ef684deec1f5385fdb0d4c64827">SVF::AbstractInterpretation::_func_map</a></div><div class="ttdeci">Map&lt; std::string, std::function&lt; void(const CallSite &amp;)&gt; &gt; _func_map</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00383">AbstractInterpretation.h:383</a></div></div>
1214
1219
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00046">GeneralType.h:46</a></div></div>
1215
1220
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ab65033f068bfbeb0a1c52dcec3beb6bc"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab65033f068bfbeb0a1c52dcec3beb6bc">SVF::SVFUtil::errs</a></div><div class="ttdeci">std::ostream &amp; errs()</div><div class="ttdoc">Overwrite llvm::errs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00056">SVFUtil.h:56</a></div></div>
1216
- <div class="ttc" id="aclassSVF_1_1AbstractExecution_html_ae002abb8711300ff52200f78f1463369"><div class="ttname"><a href="classSVF_1_1AbstractExecution.html#ae002abb8711300ff52200f78f1463369">SVF::AbstractExecution::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AbstractExecution_8cpp_source.html#l01214">AbstractExecution.cpp:1214</a></div></div>
1217
- <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a999c358b80dd07591b0432eaa41c20c9"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">SVF::SVFIR2ItvExeState::inVarToAddrsTable</a></div><div class="ttdeci">bool inVarToAddrsTable(u32_t id) const</div><div class="ttdoc">whether the variable is in varToAddrs table</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8h_source.html#l00132">SVFIR2ItvExeState.h:132</a></div></div>
1218
1221
  <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a7c11b81809cb087317cbea654a589f75"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">SVF::BufOverflowChecker::addBugToRecoder</a></div><div class="ttdeci">void addBugToRecoder(const BufOverflowException &amp;e, const ICFGNode *node)</div></div>
1222
+ <div class="ttc" id="aclassSVF_1_1AbstractInterpretation_html_a219313e979d779221116c1bc45becc1b"><div class="ttname"><a href="classSVF_1_1AbstractInterpretation.html#a219313e979d779221116c1bc45becc1b">SVF::AbstractInterpretation::_checkpoints</a></div><div class="ttdeci">Set&lt; const CallICFGNode * &gt; _checkpoints</div><div class="ttdef"><b>Definition:</b> <a href="AbstractInterpretation_8h_source.html#l00384">AbstractInterpretation.h:384</a></div></div>
1219
1223
  <!-- start footer part -->
1220
1224
  <hr class="footer"/><address class="footer"><small>
1221
1225
  Generated by &#160;<a href="http://www.doxygen.org/index.html">