svf-tools 1.0.874 → 1.0.875

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 (796) hide show
  1. package/SVF-doxygen/html/AE_8cpp.html +218 -0
  2. package/SVF-doxygen/html/AE_8cpp_source.html +2124 -0
  3. package/SVF-doxygen/html/AE_8h.html +118 -0
  4. package/SVF-doxygen/html/AE_8h_source.html +513 -0
  5. package/SVF-doxygen/html/AbstractPointsToDS_8h_source.html +1 -1
  6. package/SVF-doxygen/html/AbstractValue_8h.html +2 -3
  7. package/SVF-doxygen/html/AbstractValue_8h_source.html +50 -52
  8. package/SVF-doxygen/html/AccessPath_8cpp_source.html +9 -9
  9. package/SVF-doxygen/html/AccessPath_8h_source.html +5 -5
  10. package/SVF-doxygen/html/AddressValue_8h.html +22 -4
  11. package/SVF-doxygen/html/AddressValue_8h_source.html +213 -211
  12. package/SVF-doxygen/html/AndersenPWC_8h_source.html +4 -4
  13. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +4 -4
  14. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +4 -4
  15. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +9 -8
  16. package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +2 -2
  17. package/SVF-doxygen/html/Andersen_8cpp_source.html +21 -21
  18. package/SVF-doxygen/html/Andersen_8h_source.html +4 -4
  19. package/SVF-doxygen/html/BoundedZ3Expr_8cpp.html +3 -3
  20. package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +4 -4
  21. package/SVF-doxygen/html/BoundedZ3Expr_8h.html +2 -2
  22. package/SVF-doxygen/html/BoundedZ3Expr_8h_source.html +5 -5
  23. package/SVF-doxygen/html/BreakConstantExpr_8cpp.html +3 -3
  24. package/SVF-doxygen/html/BreakConstantExpr_8cpp_source.html +4 -3
  25. package/SVF-doxygen/html/BufOverflowChecker_8cpp.html +101 -0
  26. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +1040 -0
  27. package/SVF-doxygen/html/BufOverflowChecker_8h.html +102 -0
  28. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +300 -0
  29. package/SVF-doxygen/html/CDGBuilder_8cpp_source.html +3 -3
  30. package/SVF-doxygen/html/CDGBuilder_8h_source.html +3 -3
  31. package/SVF-doxygen/html/CDG_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/CDG_8h_source.html +3 -3
  33. package/SVF-doxygen/html/CFBasicBlockGBuilder_8cpp_source.html +7 -7
  34. package/SVF-doxygen/html/CFBasicBlockGBuilder_8h_source.html +25 -19
  35. package/SVF-doxygen/html/CFBasicBlockGWTO_8h.html +2 -2
  36. package/SVF-doxygen/html/CFBasicBlockGWTO_8h_source.html +37 -34
  37. package/SVF-doxygen/html/CFBasicBlockG_8cpp_source.html +3 -3
  38. package/SVF-doxygen/html/CFBasicBlockG_8h_source.html +501 -494
  39. package/SVF-doxygen/html/CFGNormalizer_8cpp_source.html +5 -5
  40. package/SVF-doxygen/html/CFGNormalizer_8h_source.html +3 -3
  41. package/SVF-doxygen/html/CFGrammar_8cpp_source.html +3 -3
  42. package/SVF-doxygen/html/CFGrammar_8h_source.html +21 -21
  43. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +4 -4
  44. package/SVF-doxygen/html/CFLAlias_8h_source.html +5 -5
  45. package/SVF-doxygen/html/CFLBase_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/CFLGraphBuilder_8h_source.html +2 -2
  48. package/SVF-doxygen/html/CFLGraph_8h_source.html +1 -1
  49. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +3 -3
  50. package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +2 -2
  51. package/SVF-doxygen/html/CFLSolver_8h_source.html +1 -1
  52. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +6 -6
  53. package/SVF-doxygen/html/CHG_8cpp.html +2 -2
  54. package/SVF-doxygen/html/CHG_8cpp_source.html +3 -2
  55. package/SVF-doxygen/html/CHG_8h_source.html +3 -3
  56. package/SVF-doxygen/html/CSC_8cpp_source.html +3 -3
  57. package/SVF-doxygen/html/CSC_8h_source.html +4 -4
  58. package/SVF-doxygen/html/ConditionalPT_8h_source.html +5 -5
  59. package/SVF-doxygen/html/ConsExeState_8cpp.html +4 -4
  60. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +552 -555
  61. package/SVF-doxygen/html/ConsExeState_8h.html +28 -5
  62. package/SVF-doxygen/html/ConsExeState_8h_source.html +439 -438
  63. package/SVF-doxygen/html/ConsGEdge_8h_source.html +2 -2
  64. package/SVF-doxygen/html/ConsGNode_8h_source.html +5 -5
  65. package/SVF-doxygen/html/ConsG_8cpp_source.html +3 -3
  66. package/SVF-doxygen/html/ConsG_8h_source.html +4 -4
  67. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +6 -6
  68. package/SVF-doxygen/html/ContextDDA_8h_source.html +4 -4
  69. package/SVF-doxygen/html/CoreBitVector_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/CoreBitVector_8h_source.html +2 -2
  71. package/SVF-doxygen/html/CppUtil_8cpp.html +5 -5
  72. package/SVF-doxygen/html/CppUtil_8cpp_source.html +10 -9
  73. package/SVF-doxygen/html/CppUtil_8h_source.html +2 -2
  74. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  75. package/SVF-doxygen/html/DCHG_8cpp_source.html +3 -3
  76. package/SVF-doxygen/html/DCHG_8h_source.html +3 -3
  77. package/SVF-doxygen/html/DDAClient_8cpp_source.html +7 -7
  78. package/SVF-doxygen/html/DDAClient_8h_source.html +3 -3
  79. package/SVF-doxygen/html/DDAPass_8cpp_source.html +5 -5
  80. package/SVF-doxygen/html/DDAPass_8h_source.html +3 -3
  81. package/SVF-doxygen/html/DDAStat_8cpp_source.html +2 -2
  82. package/SVF-doxygen/html/DDAStat_8h_source.html +2 -2
  83. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +6 -6
  84. package/SVF-doxygen/html/DPItem_8h_source.html +4 -4
  85. package/SVF-doxygen/html/ExeState_8cpp.html +4 -4
  86. package/SVF-doxygen/html/ExeState_8cpp_source.html +12 -12
  87. package/SVF-doxygen/html/ExeState_8h.html +5 -4
  88. package/SVF-doxygen/html/ExeState_8h_source.html +296 -294
  89. package/SVF-doxygen/html/ExtAPI_8cpp_source.html +1 -1
  90. package/SVF-doxygen/html/ExtAPI_8h_source.html +1 -1
  91. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +8 -8
  92. package/SVF-doxygen/html/FSMPTA_8h_source.html +3 -3
  93. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +6 -6
  94. package/SVF-doxygen/html/FlowDDA_8h_source.html +3 -3
  95. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +4 -4
  96. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +8 -8
  97. package/SVF-doxygen/html/FlowSensitive_8h_source.html +3 -3
  98. package/SVF-doxygen/html/GeneralType_8h.html +186 -0
  99. package/SVF-doxygen/html/GeneralType_8h_source.html +244 -0
  100. package/SVF-doxygen/html/GenericGraph_8h_source.html +5 -5
  101. package/SVF-doxygen/html/GrammarBuilder_8h_source.html +1 -1
  102. package/SVF-doxygen/html/GraphPrinter_8h_source.html +1 -1
  103. package/SVF-doxygen/html/GraphTraits_8h_source.html +1 -1
  104. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +4 -4
  105. package/SVF-doxygen/html/ICFGBuilder_8h_source.html +1 -1
  106. package/SVF-doxygen/html/ICFGEdge_8h_source.html +3 -3
  107. package/SVF-doxygen/html/ICFGNode_8h_source.html +2 -2
  108. package/SVF-doxygen/html/ICFGStat_8h_source.html +1 -1
  109. package/SVF-doxygen/html/ICFGWTO_8h.html +2 -2
  110. package/SVF-doxygen/html/ICFGWTO_8h_source.html +2 -2
  111. package/SVF-doxygen/html/ICFG_8cpp_source.html +3 -3
  112. package/SVF-doxygen/html/ICFG_8h_source.html +3 -3
  113. package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
  114. package/SVF-doxygen/html/IRGraph_8h_source.html +3 -3
  115. package/SVF-doxygen/html/IntervalExeState_8cpp.html +3 -3
  116. package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +9 -9
  117. package/SVF-doxygen/html/IntervalExeState_8h.html +4 -4
  118. package/SVF-doxygen/html/IntervalExeState_8h_source.html +19 -19
  119. package/SVF-doxygen/html/IntervalValue_8h.html +4 -4
  120. package/SVF-doxygen/html/IntervalValue_8h_source.html +25 -25
  121. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +3 -3
  122. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +24 -24
  123. package/SVF-doxygen/html/LLVMModule_8h_source.html +4 -4
  124. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +6 -6
  125. package/SVF-doxygen/html/LLVMUtil_8h.html +4 -4
  126. package/SVF-doxygen/html/LLVMUtil_8h_source.html +3 -3
  127. package/SVF-doxygen/html/LeakChecker_8cpp_source.html +1 -1
  128. package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
  129. package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +7 -7
  130. package/SVF-doxygen/html/LockAnalysis_8h_source.html +6 -6
  131. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  132. package/SVF-doxygen/html/LockResultValidator_8h_source.html +2 -2
  133. package/SVF-doxygen/html/MHP_8cpp_source.html +8 -8
  134. package/SVF-doxygen/html/MHP_8h_source.html +4 -4
  135. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +2 -2
  136. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +2 -2
  137. package/SVF-doxygen/html/MTAAnnotator_8h_source.html +2 -2
  138. package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +5 -5
  139. package/SVF-doxygen/html/MTAStat_8cpp_source.html +2 -2
  140. package/SVF-doxygen/html/MTAStat_8h_source.html +1 -1
  141. package/SVF-doxygen/html/MTA_8cpp_source.html +6 -6
  142. package/SVF-doxygen/html/MTA_8h_source.html +1 -1
  143. package/SVF-doxygen/html/MemPartition_8h_source.html +2 -2
  144. package/SVF-doxygen/html/MemRegion_8cpp_source.html +11 -11
  145. package/SVF-doxygen/html/MemRegion_8h_source.html +5 -5
  146. package/SVF-doxygen/html/MemSSA_8cpp_source.html +7 -7
  147. package/SVF-doxygen/html/MemSSA_8h_source.html +5 -5
  148. package/SVF-doxygen/html/MutablePointsToDS_8h_source.html +2 -2
  149. package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +6 -6
  150. package/SVF-doxygen/html/NodeIDAllocator_8h_source.html +3 -3
  151. package/SVF-doxygen/html/NumericLiteral_8h.html +4 -5
  152. package/SVF-doxygen/html/NumericLiteral_8h_source.html +440 -442
  153. package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +4 -4
  154. package/SVF-doxygen/html/ObjTypeInference_8h_source.html +3 -3
  155. package/SVF-doxygen/html/Options_8cpp_source.html +20 -1
  156. package/SVF-doxygen/html/Options_8h_source.html +17 -4
  157. package/SVF-doxygen/html/PAGBuilderFromFile_8cpp.html +2 -2
  158. package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +4 -3
  159. package/SVF-doxygen/html/PAGBuilderFromFile_8h_source.html +1 -1
  160. package/SVF-doxygen/html/PCG_8cpp_source.html +3 -3
  161. package/SVF-doxygen/html/PCG_8h_source.html +1 -1
  162. package/SVF-doxygen/html/PTACallGraph_8cpp_source.html +1 -1
  163. package/SVF-doxygen/html/PTACallGraph_8h_source.html +6 -6
  164. package/SVF-doxygen/html/PTAStat_8cpp_source.html +2 -2
  165. package/SVF-doxygen/html/PTAStat_8h_source.html +1 -1
  166. package/SVF-doxygen/html/PersistentPointsToCache_8h_source.html +3 -3
  167. package/SVF-doxygen/html/PersistentPointsToDS_8h_source.html +2 -2
  168. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +5 -5
  169. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +7 -7
  170. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +7 -7
  171. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +7 -7
  172. package/SVF-doxygen/html/PointsTo_8cpp_source.html +1 -1
  173. package/SVF-doxygen/html/PointsTo_8h_source.html +1 -1
  174. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +4 -4
  175. package/SVF-doxygen/html/ProgSlice_8h_source.html +3 -3
  176. package/SVF-doxygen/html/RelExeState_8cpp.html +5 -4
  177. package/SVF-doxygen/html/RelExeState_8cpp_source.html +161 -159
  178. package/SVF-doxygen/html/RelExeState_8h.html +4 -4
  179. package/SVF-doxygen/html/RelExeState_8h_source.html +23 -23
  180. package/SVF-doxygen/html/RelationSolver_8cpp.html +3 -3
  181. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +7 -7
  182. package/SVF-doxygen/html/RelationSolver_8h.html +3 -3
  183. package/SVF-doxygen/html/RelationSolver_8h_source.html +6 -6
  184. package/SVF-doxygen/html/SCC_8h_source.html +2 -2
  185. package/SVF-doxygen/html/SVFBugReport_8h_source.html +3 -3
  186. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +18 -18
  187. package/SVF-doxygen/html/SVFFileSystem_8h.html +1 -1
  188. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +14 -14
  189. package/SVF-doxygen/html/SVFGBuilder_8cpp_source.html +2 -2
  190. package/SVF-doxygen/html/SVFGEdge_8h_source.html +2 -2
  191. package/SVF-doxygen/html/SVFGNode_8h_source.html +3 -3
  192. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +3 -3
  193. package/SVF-doxygen/html/SVFGOPT_8h_source.html +3 -3
  194. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +2 -2
  195. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +3 -3
  196. package/SVF-doxygen/html/SVFGStat_8h_source.html +4 -4
  197. package/SVF-doxygen/html/SVFG_8cpp_source.html +3 -3
  198. package/SVF-doxygen/html/SVFG_8h_source.html +3 -3
  199. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp.html +3 -3
  200. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +22 -22
  201. package/SVF-doxygen/html/SVFIR2ConsExeState_8h.html +3 -3
  202. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +14 -14
  203. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp.html +3 -3
  204. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +26 -26
  205. package/SVF-doxygen/html/SVFIR2ItvExeState_8h.html +7 -7
  206. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +15 -15
  207. package/SVF-doxygen/html/SVFIR2Relation_8cpp.html +3 -3
  208. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +4 -4
  209. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +9 -9
  210. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +3 -3
  211. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +4 -4
  212. package/SVF-doxygen/html/SVFIR_8cpp_source.html +3 -3
  213. package/SVF-doxygen/html/SVFIR_8h_source.html +7 -7
  214. package/SVF-doxygen/html/SVFLoop_8h_source.html +2 -2
  215. package/SVF-doxygen/html/SVFStat_8cpp_source.html +4 -4
  216. package/SVF-doxygen/html/SVFStat_8h_source.html +1 -1
  217. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +2 -2
  218. package/SVF-doxygen/html/SVFStatements_8h_source.html +7 -7
  219. package/SVF-doxygen/html/SVFType_8cpp_source.html +8 -8
  220. package/SVF-doxygen/html/SVFType_8h.html +24 -113
  221. package/SVF-doxygen/html/SVFType_8h_source.html +580 -698
  222. package/SVF-doxygen/html/SVFUtil_8cpp_source.html +2 -2
  223. package/SVF-doxygen/html/SVFUtil_8h.html +1 -1
  224. package/SVF-doxygen/html/SVFUtil_8h_source.html +5 -5
  225. package/SVF-doxygen/html/SVFValue_8cpp.html +6 -6
  226. package/SVF-doxygen/html/SVFValue_8cpp_source.html +6 -5
  227. package/SVF-doxygen/html/SVFValue_8h_source.html +10 -10
  228. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  229. package/SVF-doxygen/html/SVFVariables_8h_source.html +3 -3
  230. package/SVF-doxygen/html/SaberCheckerAPI_8h_source.html +1 -1
  231. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +12 -11
  232. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +3 -3
  233. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +4 -4
  234. package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +2 -2
  235. package/SVF-doxygen/html/SingleAbsValue_8h.html +3 -3
  236. package/SVF-doxygen/html/SingleAbsValue_8h_source.html +5 -5
  237. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +5 -5
  238. package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +2 -2
  239. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +6 -6
  240. package/SVF-doxygen/html/Steensgaard_8h_source.html +4 -4
  241. package/SVF-doxygen/html/SymState_8cpp.html +3 -3
  242. package/SVF-doxygen/html/SymState_8cpp_source.html +4 -4
  243. package/SVF-doxygen/html/SymState_8h.html +3 -3
  244. package/SVF-doxygen/html/SymState_8h_source.html +7 -7
  245. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +9 -9
  246. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +3 -3
  247. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +17 -17
  248. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +8 -8
  249. package/SVF-doxygen/html/TCT_8cpp_source.html +5 -5
  250. package/SVF-doxygen/html/TCT_8h_source.html +5 -5
  251. package/SVF-doxygen/html/ThreadAPI_8cpp_source.html +1 -1
  252. package/SVF-doxygen/html/ThreadAPI_8h_source.html +1 -1
  253. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +3 -3
  254. package/SVF-doxygen/html/ThreadCallGraph_8h_source.html +4 -4
  255. package/SVF-doxygen/html/TypeAnalysis_8cpp_source.html +1 -1
  256. package/SVF-doxygen/html/VFGEdge_8h_source.html +2 -2
  257. package/SVF-doxygen/html/VFGNode_8h_source.html +4 -4
  258. package/SVF-doxygen/html/VFG_8cpp_source.html +4 -4
  259. package/SVF-doxygen/html/VFG_8h_source.html +5 -5
  260. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +5 -5
  261. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +6 -6
  262. package/SVF-doxygen/html/VersionedFlowSensitive_8h_source.html +5 -5
  263. package/SVF-doxygen/html/WPAFSSolver_8h_source.html +1 -1
  264. package/SVF-doxygen/html/WPAPass_8cpp_source.html +5 -5
  265. package/SVF-doxygen/html/WPAPass_8h_source.html +3 -3
  266. package/SVF-doxygen/html/WPASolver_8h_source.html +3 -3
  267. package/SVF-doxygen/html/WPAStat_8h_source.html +1 -1
  268. package/SVF-doxygen/html/WTO_8h_source.html +3 -3
  269. package/SVF-doxygen/html/WorkList_8h_source.html +2 -2
  270. package/SVF-doxygen/html/Z3Expr_8cpp_source.html +1 -1
  271. package/SVF-doxygen/html/Z3Expr_8h_source.html +1 -1
  272. package/SVF-doxygen/html/ae_8cpp.html +70 -21
  273. package/SVF-doxygen/html/ae_8cpp_source.html +715 -631
  274. package/SVF-doxygen/html/annotated.html +446 -440
  275. package/SVF-doxygen/html/classSVF_1_1AE-members.html +137 -0
  276. package/SVF-doxygen/html/classSVF_1_1AE.html +2884 -0
  277. package/SVF-doxygen/html/classSVF_1_1AE.png +0 -0
  278. package/SVF-doxygen/html/classSVF_1_1AEAPI-members.html +119 -0
  279. package/SVF-doxygen/html/classSVF_1_1AEAPI.html +1947 -0
  280. package/SVF-doxygen/html/classSVF_1_1AEAPI.png +0 -0
  281. package/SVF-doxygen/html/classSVF_1_1AEStat-members.html +123 -0
  282. package/SVF-doxygen/html/classSVF_1_1AEStat.html +707 -0
  283. package/SVF-doxygen/html/classSVF_1_1AEStat.png +0 -0
  284. package/SVF-doxygen/html/classSVF_1_1AbstractValue.html +17 -17
  285. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +16 -15
  286. package/SVF-doxygen/html/classSVF_1_1AddressValue.html +146 -147
  287. package/SVF-doxygen/html/classSVF_1_1AliasCFLGraphBuilder.html +1 -1
  288. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +1 -1
  289. package/SVF-doxygen/html/classSVF_1_1Andersen.html +9 -9
  290. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +3 -3
  291. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +4 -4
  292. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +6 -6
  293. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +34 -34
  294. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +2 -2
  295. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +4 -4
  296. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +3 -3
  297. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +2 -2
  298. package/SVF-doxygen/html/classSVF_1_1BranchVFGNode.html +1 -1
  299. package/SVF-doxygen/html/classSVF_1_1BreakConstantGEPs.html +5 -5
  300. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker-members.html +139 -0
  301. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +619 -0
  302. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.png +0 -0
  303. package/SVF-doxygen/html/classSVF_1_1BufOverflowCheckerAPI-members.html +127 -0
  304. package/SVF-doxygen/html/classSVF_1_1BufOverflowCheckerAPI.html +984 -0
  305. package/SVF-doxygen/html/classSVF_1_1BufOverflowCheckerAPI.png +0 -0
  306. package/SVF-doxygen/html/classSVF_1_1CDGBuilder.html +3 -3
  307. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder-members.html +1 -0
  308. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGBuilder.html +38 -6
  309. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO-members.html +2 -1
  310. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGWTO.html +50 -23
  311. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockGraph.html +92 -92
  312. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode-members.html +2 -1
  313. package/SVF-doxygen/html/classSVF_1_1CFBasicBlockNode.html +189 -156
  314. package/SVF-doxygen/html/classSVF_1_1CFGNormalizer.html +5 -5
  315. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +6 -6
  316. package/SVF-doxygen/html/classSVF_1_1CFLBase.html +1 -1
  317. package/SVF-doxygen/html/classSVF_1_1CFLGraphBuilder.html +2 -2
  318. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +3 -3
  319. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +9 -9
  320. package/SVF-doxygen/html/classSVF_1_1CSC.html +3 -3
  321. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +4 -4
  322. package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +783 -785
  323. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +6 -6
  324. package/SVF-doxygen/html/classSVF_1_1ConstraintNode-members.html +34 -34
  325. package/SVF-doxygen/html/classSVF_1_1ConstraintNode.html +65 -25
  326. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +7 -7
  327. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +3 -3
  328. package/SVF-doxygen/html/classSVF_1_1DDAClient.html +7 -7
  329. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +6 -6
  330. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +9 -9
  331. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +5 -5
  332. package/SVF-doxygen/html/classSVF_1_1ExeState.html +195 -195
  333. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +5 -5
  334. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +7 -7
  335. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +12 -12
  336. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
  337. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +8 -8
  338. package/SVF-doxygen/html/classSVF_1_1GenericNode.html +10 -9
  339. package/SVF-doxygen/html/classSVF_1_1GenericNode.png +0 -0
  340. package/SVF-doxygen/html/classSVF_1_1GrammarBase.html +2 -2
  341. package/SVF-doxygen/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +1 -1
  342. package/SVF-doxygen/html/classSVF_1_1ICFG.html +3 -3
  343. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +5 -5
  344. package/SVF-doxygen/html/classSVF_1_1ICFGWTO.html +1 -1
  345. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  346. package/SVF-doxygen/html/classSVF_1_1IntervalESBase.html +20 -21
  347. package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +11 -11
  348. package/SVF-doxygen/html/classSVF_1_1IntervalValue.html +15 -15
  349. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +3 -3
  350. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +43 -44
  351. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
  352. package/SVF-doxygen/html/classSVF_1_1LockAnalysis.html +7 -7
  353. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  354. package/SVF-doxygen/html/classSVF_1_1MHP.html +7 -7
  355. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +7 -7
  356. package/SVF-doxygen/html/classSVF_1_1MTA.html +5 -5
  357. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +2 -2
  358. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +4 -4
  359. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +4 -4
  360. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +6 -6
  361. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +14 -14
  362. package/SVF-doxygen/html/classSVF_1_1MemSSAStat.html +6 -6
  363. package/SVF-doxygen/html/classSVF_1_1MutableDFPTData.html +1 -1
  364. package/SVF-doxygen/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +4 -4
  365. package/SVF-doxygen/html/classSVF_1_1NumericLiteral.html +326 -326
  366. package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +12 -12
  367. package/SVF-doxygen/html/classSVF_1_1Options-members.html +79 -73
  368. package/SVF-doxygen/html/classSVF_1_1Options.html +168 -0
  369. package/SVF-doxygen/html/classSVF_1_1PAGBuilderFromFile.html +5 -5
  370. package/SVF-doxygen/html/classSVF_1_1PCG.html +3 -3
  371. package/SVF-doxygen/html/classSVF_1_1POCRSolver.html +1 -1
  372. package/SVF-doxygen/html/classSVF_1_1PTACallGraph.html +1 -1
  373. package/SVF-doxygen/html/classSVF_1_1PTAStat.html +6 -6
  374. package/SVF-doxygen/html/classSVF_1_1PersistentDFPTData.html +1 -1
  375. package/SVF-doxygen/html/classSVF_1_1PersistentDiffPTData.html +1 -1
  376. package/SVF-doxygen/html/classSVF_1_1PersistentPTData.html +1 -1
  377. package/SVF-doxygen/html/classSVF_1_1PersistentPointsToCache.html +1 -1
  378. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +2 -2
  379. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +7 -7
  380. package/SVF-doxygen/html/classSVF_1_1PointsTo.html +1 -1
  381. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +6 -6
  382. package/SVF-doxygen/html/classSVF_1_1RelExeState.html +140 -140
  383. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +12 -12
  384. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +29 -29
  385. package/SVF-doxygen/html/classSVF_1_1SVFBasicBlock.html +5 -5
  386. package/SVF-doxygen/html/classSVF_1_1SVFFunction.html +1 -1
  387. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +19 -19
  388. package/SVF-doxygen/html/classSVF_1_1SVFG.html +4 -4
  389. package/SVF-doxygen/html/classSVF_1_1SVFGBuilder.html +2 -2
  390. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +3 -3
  391. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +5 -5
  392. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +1 -1
  393. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +55 -55
  394. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +69 -69
  395. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +32 -32
  396. package/SVF-doxygen/html/classSVF_1_1SVFIRReader.html +2 -2
  397. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +21 -21
  398. package/SVF-doxygen/html/classSVF_1_1SVFLoopAndDomInfo.html +1 -1
  399. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +25 -25
  400. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +13 -13
  401. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +31 -30
  402. package/SVF-doxygen/html/classSVF_1_1SVFStat.png +0 -0
  403. package/SVF-doxygen/html/classSVF_1_1SVFStmt.html +1 -1
  404. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +25 -25
  405. package/SVF-doxygen/html/classSVF_1_1SVFType.html +89 -89
  406. package/SVF-doxygen/html/classSVF_1_1SVFVar.html +1 -1
  407. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +17 -17
  408. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
  409. package/SVF-doxygen/html/classSVF_1_1SingleAbsValue.html +1 -1
  410. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +6 -6
  411. package/SVF-doxygen/html/classSVF_1_1StInfo.html +73 -73
  412. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +6 -6
  413. package/SVF-doxygen/html/classSVF_1_1SymState.html +4 -4
  414. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +24 -24
  415. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +20 -20
  416. package/SVF-doxygen/html/classSVF_1_1TCT.html +6 -6
  417. package/SVF-doxygen/html/classSVF_1_1ThreadAPI.html +1 -1
  418. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +3 -3
  419. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +4 -4
  420. package/SVF-doxygen/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
  421. package/SVF-doxygen/html/classSVF_1_1VFG.html +3 -3
  422. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +8 -8
  423. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
  424. package/SVF-doxygen/html/classSVF_1_1WPAFSSolver.html +2 -2
  425. package/SVF-doxygen/html/classSVF_1_1WPAMinimumSolver.html +2 -2
  426. package/SVF-doxygen/html/classSVF_1_1WPAPass.html +5 -5
  427. package/SVF-doxygen/html/classSVF_1_1WPASCCSolver.html +2 -2
  428. package/SVF-doxygen/html/classSVF_1_1WPASolver.html +1 -1
  429. package/SVF-doxygen/html/classSymblicAbstractionTest.html +564 -564
  430. package/SVF-doxygen/html/classes.html +454 -446
  431. package/SVF-doxygen/html/dir_2c6fb801affc4b3efe6e1ed5974683f6.html +112 -0
  432. package/SVF-doxygen/html/dir_390f2a6be5eff59a6919ecbd9cc9f31d.html +1 -1
  433. package/SVF-doxygen/html/dir_445b24f35a8ddd2effd3d23ee1278e0a.html +2 -0
  434. package/SVF-doxygen/html/dir_53d761ae38d6f143a0d195c719804439.html +88 -0
  435. package/SVF-doxygen/html/dir_7e02b97230e2801c6749b0b00985526f.html +88 -0
  436. package/SVF-doxygen/html/dir_81caa96ab1d3de93b353e2bbe80e6067.html +92 -0
  437. package/SVF-doxygen/html/dir_946e55d8e7afdb1629c1e1d7cdc5486a.html +1 -1
  438. package/SVF-doxygen/html/dir_9a8e7a56f4029a0d9f62b1c6d1f6e85b.html +100 -0
  439. package/SVF-doxygen/html/dir_fbec400583b4bd6c5f2e89c86c5943a6.html +92 -0
  440. package/SVF-doxygen/html/files.html +51 -42
  441. package/SVF-doxygen/html/functions.html +90 -2
  442. package/SVF-doxygen/html/functions_a.html +41 -11
  443. package/SVF-doxygen/html/functions_b.html +20 -4
  444. package/SVF-doxygen/html/functions_c.html +47 -31
  445. package/SVF-doxygen/html/functions_d.html +14 -2
  446. package/SVF-doxygen/html/functions_e.html +7 -1
  447. package/SVF-doxygen/html/functions_enum.html +3 -0
  448. package/SVF-doxygen/html/functions_eval_m.html +6 -0
  449. package/SVF-doxygen/html/functions_eval_s.html +6 -0
  450. package/SVF-doxygen/html/functions_eval_u.html +3 -0
  451. package/SVF-doxygen/html/functions_f.html +15 -12
  452. package/SVF-doxygen/html/functions_func.html +37 -10
  453. package/SVF-doxygen/html/functions_func_b.html +11 -2
  454. package/SVF-doxygen/html/functions_func_c.html +43 -27
  455. package/SVF-doxygen/html/functions_func_d.html +13 -1
  456. package/SVF-doxygen/html/functions_func_e.html +4 -1
  457. package/SVF-doxygen/html/functions_func_f.html +6 -3
  458. package/SVF-doxygen/html/functions_func_g.html +53 -17
  459. package/SVF-doxygen/html/functions_func_h.html +52 -1
  460. package/SVF-doxygen/html/functions_func_i.html +38 -8
  461. package/SVF-doxygen/html/functions_func_m.html +5 -2
  462. package/SVF-doxygen/html/functions_func_n.html +5 -2
  463. package/SVF-doxygen/html/functions_func_o.html +3 -3
  464. package/SVF-doxygen/html/functions_func_p.html +6 -5
  465. package/SVF-doxygen/html/functions_func_r.html +13 -8
  466. package/SVF-doxygen/html/functions_func_s.html +48 -26
  467. package/SVF-doxygen/html/functions_func_t.html +3 -0
  468. package/SVF-doxygen/html/functions_func_w.html +9 -3
  469. package/SVF-doxygen/html/functions_func_~.html +18 -0
  470. package/SVF-doxygen/html/functions_g.html +57 -18
  471. package/SVF-doxygen/html/functions_h.html +55 -4
  472. package/SVF-doxygen/html/functions_i.html +41 -11
  473. package/SVF-doxygen/html/functions_m.html +17 -2
  474. package/SVF-doxygen/html/functions_n.html +8 -5
  475. package/SVF-doxygen/html/functions_o.html +19 -16
  476. package/SVF-doxygen/html/functions_p.html +17 -18
  477. package/SVF-doxygen/html/functions_r.html +17 -7
  478. package/SVF-doxygen/html/functions_rela.html +6 -0
  479. package/SVF-doxygen/html/functions_s.html +51 -23
  480. package/SVF-doxygen/html/functions_t.html +10 -4
  481. package/SVF-doxygen/html/functions_type.html +2 -1
  482. package/SVF-doxygen/html/functions_type_c.html +2 -1
  483. package/SVF-doxygen/html/functions_u.html +5 -2
  484. package/SVF-doxygen/html/functions_v.html +3 -1
  485. package/SVF-doxygen/html/functions_vars.html +90 -2
  486. package/SVF-doxygen/html/functions_vars_b.html +9 -0
  487. package/SVF-doxygen/html/functions_vars_c.html +3 -0
  488. package/SVF-doxygen/html/functions_vars_g.html +3 -0
  489. package/SVF-doxygen/html/functions_vars_m.html +6 -0
  490. package/SVF-doxygen/html/functions_vars_o.html +3 -0
  491. package/SVF-doxygen/html/functions_vars_r.html +3 -0
  492. package/SVF-doxygen/html/functions_vars_t.html +3 -0
  493. package/SVF-doxygen/html/functions_vars_w.html +3 -0
  494. package/SVF-doxygen/html/functions_w.html +19 -14
  495. package/SVF-doxygen/html/functions_~.html +18 -0
  496. package/SVF-doxygen/html/globals.html +8 -2
  497. package/SVF-doxygen/html/globals_b.html +3 -0
  498. package/SVF-doxygen/html/globals_defs.html +9 -0
  499. package/SVF-doxygen/html/globals_n.html +5 -2
  500. package/SVF-doxygen/html/globals_s.html +5 -2
  501. package/SVF-doxygen/html/globals_vars.html +9 -3
  502. package/SVF-doxygen/html/globals_z.html +3 -3
  503. package/SVF-doxygen/html/hierarchy.html +647 -640
  504. package/SVF-doxygen/html/namespaceSVF.html +166 -70
  505. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +8 -8
  506. package/SVF-doxygen/html/namespaceSVF_1_1SVFUtil.html +4 -4
  507. package/SVF-doxygen/html/namespaceSVF_1_1cppUtil.html +6 -6
  508. package/SVF-doxygen/html/namespacemembers_a.html +3 -0
  509. package/SVF-doxygen/html/namespacemembers_enum.html +3 -0
  510. package/SVF-doxygen/html/namespacemembers_func_i.html +8 -5
  511. package/SVF-doxygen/html/namespacemembers_i.html +10 -7
  512. package/SVF-doxygen/html/search/all_0.js +182 -154
  513. package/SVF-doxygen/html/search/all_1.js +507 -496
  514. package/SVF-doxygen/html/search/all_10.js +325 -325
  515. package/SVF-doxygen/html/search/all_11.js +228 -226
  516. package/SVF-doxygen/html/search/all_12.js +569 -559
  517. package/SVF-doxygen/html/search/all_13.js +208 -206
  518. package/SVF-doxygen/html/search/all_14.js +69 -68
  519. package/SVF-doxygen/html/search/all_15.js +176 -176
  520. package/SVF-doxygen/html/search/all_16.js +78 -75
  521. package/SVF-doxygen/html/search/all_17.js +1 -1
  522. package/SVF-doxygen/html/search/all_18.js +1 -1
  523. package/SVF-doxygen/html/search/all_19.js +26 -26
  524. package/SVF-doxygen/html/search/all_1a.js +182 -176
  525. package/SVF-doxygen/html/search/all_2.js +182 -174
  526. package/SVF-doxygen/html/search/all_3.js +654 -650
  527. package/SVF-doxygen/html/search/all_4.js +237 -233
  528. package/SVF-doxygen/html/search/all_5.js +128 -126
  529. package/SVF-doxygen/html/search/all_6.js +232 -231
  530. package/SVF-doxygen/html/search/all_7.js +1060 -1047
  531. package/SVF-doxygen/html/search/all_8.js +217 -201
  532. package/SVF-doxygen/html/search/all_9.js +628 -619
  533. package/SVF-doxygen/html/search/all_a.js +46 -46
  534. package/SVF-doxygen/html/search/all_b.js +26 -26
  535. package/SVF-doxygen/html/search/all_c.js +115 -115
  536. package/SVF-doxygen/html/search/all_d.js +203 -198
  537. package/SVF-doxygen/html/search/all_e.js +209 -207
  538. package/SVF-doxygen/html/search/all_f.js +121 -120
  539. package/SVF-doxygen/html/search/classes_0.js +29 -26
  540. package/SVF-doxygen/html/search/classes_1.js +12 -9
  541. package/SVF-doxygen/html/search/classes_10.js +74 -74
  542. package/SVF-doxygen/html/search/classes_11.js +14 -14
  543. package/SVF-doxygen/html/search/classes_12.js +2 -2
  544. package/SVF-doxygen/html/search/classes_13.js +10 -10
  545. package/SVF-doxygen/html/search/classes_14.js +20 -20
  546. package/SVF-doxygen/html/search/classes_15.js +1 -1
  547. package/SVF-doxygen/html/search/classes_2.js +78 -78
  548. package/SVF-doxygen/html/search/classes_3.js +37 -37
  549. package/SVF-doxygen/html/search/classes_4.js +9 -9
  550. package/SVF-doxygen/html/search/classes_5.js +28 -28
  551. package/SVF-doxygen/html/search/classes_6.js +104 -104
  552. package/SVF-doxygen/html/search/classes_7.js +38 -38
  553. package/SVF-doxygen/html/search/classes_8.js +58 -58
  554. package/SVF-doxygen/html/search/classes_9.js +1 -1
  555. package/SVF-doxygen/html/search/classes_a.js +12 -12
  556. package/SVF-doxygen/html/search/classes_b.js +29 -29
  557. package/SVF-doxygen/html/search/classes_c.js +6 -6
  558. package/SVF-doxygen/html/search/classes_d.js +19 -19
  559. package/SVF-doxygen/html/search/classes_e.js +36 -36
  560. package/SVF-doxygen/html/search/classes_f.js +25 -25
  561. package/SVF-doxygen/html/search/defines_0.js +3 -3
  562. package/SVF-doxygen/html/search/defines_1.js +3 -2
  563. package/SVF-doxygen/html/search/defines_10.js +2 -2
  564. package/SVF-doxygen/html/search/defines_2.js +30 -30
  565. package/SVF-doxygen/html/search/defines_3.js +20 -20
  566. package/SVF-doxygen/html/search/defines_4.js +3 -3
  567. package/SVF-doxygen/html/search/defines_5.js +4 -4
  568. package/SVF-doxygen/html/search/defines_6.js +2 -2
  569. package/SVF-doxygen/html/search/defines_7.js +5 -5
  570. package/SVF-doxygen/html/search/defines_8.js +11 -11
  571. package/SVF-doxygen/html/search/defines_9.js +9 -9
  572. package/SVF-doxygen/html/search/defines_a.js +2 -2
  573. package/SVF-doxygen/html/search/defines_b.js +1 -1
  574. package/SVF-doxygen/html/search/defines_c.js +4 -3
  575. package/SVF-doxygen/html/search/defines_d.js +2 -2
  576. package/SVF-doxygen/html/search/defines_e.js +8 -7
  577. package/SVF-doxygen/html/search/defines_f.js +4 -4
  578. package/SVF-doxygen/html/search/enums_0.js +4 -3
  579. package/SVF-doxygen/html/search/enums_1.js +2 -2
  580. package/SVF-doxygen/html/search/enums_10.js +1 -1
  581. package/SVF-doxygen/html/search/enums_11.js +1 -1
  582. package/SVF-doxygen/html/search/enums_2.js +8 -8
  583. package/SVF-doxygen/html/search/enums_3.js +1 -1
  584. package/SVF-doxygen/html/search/enums_4.js +4 -3
  585. package/SVF-doxygen/html/search/enums_5.js +1 -1
  586. package/SVF-doxygen/html/search/enums_6.js +2 -2
  587. package/SVF-doxygen/html/search/enums_7.js +2 -2
  588. package/SVF-doxygen/html/search/enums_8.js +4 -4
  589. package/SVF-doxygen/html/search/enums_9.js +1 -1
  590. package/SVF-doxygen/html/search/enums_a.js +1 -1
  591. package/SVF-doxygen/html/search/enums_b.js +7 -7
  592. package/SVF-doxygen/html/search/enums_c.js +1 -1
  593. package/SVF-doxygen/html/search/enums_d.js +4 -4
  594. package/SVF-doxygen/html/search/enums_e.js +2 -2
  595. package/SVF-doxygen/html/search/enums_f.js +4 -4
  596. package/SVF-doxygen/html/search/enumvalues_0.js +15 -14
  597. package/SVF-doxygen/html/search/enumvalues_1.js +15 -14
  598. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  599. package/SVF-doxygen/html/search/enumvalues_11.js +4 -3
  600. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  601. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  602. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  603. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  604. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  605. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  606. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  607. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  608. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  609. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  610. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  611. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  612. package/SVF-doxygen/html/search/enumvalues_a.js +17 -15
  613. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  614. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  615. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  616. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  617. package/SVF-doxygen/html/search/enumvalues_f.js +47 -45
  618. package/SVF-doxygen/html/search/files_0.js +15 -14
  619. package/SVF-doxygen/html/search/files_1.js +9 -7
  620. package/SVF-doxygen/html/search/files_10.js +8 -8
  621. package/SVF-doxygen/html/search/files_11.js +8 -8
  622. package/SVF-doxygen/html/search/files_12.js +2 -2
  623. package/SVF-doxygen/html/search/files_2.js +58 -58
  624. package/SVF-doxygen/html/search/files_3.js +14 -14
  625. package/SVF-doxygen/html/search/files_4.js +5 -5
  626. package/SVF-doxygen/html/search/files_5.js +13 -13
  627. package/SVF-doxygen/html/search/files_6.js +10 -9
  628. package/SVF-doxygen/html/search/files_7.js +15 -15
  629. package/SVF-doxygen/html/search/files_8.js +13 -13
  630. package/SVF-doxygen/html/search/files_9.js +18 -18
  631. package/SVF-doxygen/html/search/files_a.js +3 -3
  632. package/SVF-doxygen/html/search/files_b.js +4 -4
  633. package/SVF-doxygen/html/search/files_c.js +20 -20
  634. package/SVF-doxygen/html/search/files_d.js +4 -4
  635. package/SVF-doxygen/html/search/files_e.js +62 -62
  636. package/SVF-doxygen/html/search/files_f.js +8 -8
  637. package/SVF-doxygen/html/search/functions_0.js +13 -13
  638. package/SVF-doxygen/html/search/functions_1.js +374 -365
  639. package/SVF-doxygen/html/search/functions_10.js +140 -140
  640. package/SVF-doxygen/html/search/functions_11.js +142 -141
  641. package/SVF-doxygen/html/search/functions_12.js +298 -291
  642. package/SVF-doxygen/html/search/functions_13.js +74 -73
  643. package/SVF-doxygen/html/search/functions_14.js +40 -40
  644. package/SVF-doxygen/html/search/functions_15.js +72 -72
  645. package/SVF-doxygen/html/search/functions_16.js +38 -36
  646. package/SVF-doxygen/html/search/functions_17.js +3 -3
  647. package/SVF-doxygen/html/search/functions_18.js +182 -176
  648. package/SVF-doxygen/html/search/functions_2.js +95 -92
  649. package/SVF-doxygen/html/search/functions_3.js +266 -262
  650. package/SVF-doxygen/html/search/functions_4.js +84 -80
  651. package/SVF-doxygen/html/search/functions_5.js +57 -56
  652. package/SVF-doxygen/html/search/functions_6.js +65 -64
  653. package/SVF-doxygen/html/search/functions_7.js +867 -856
  654. package/SVF-doxygen/html/search/functions_8.js +164 -148
  655. package/SVF-doxygen/html/search/functions_9.js +440 -431
  656. package/SVF-doxygen/html/search/functions_a.js +30 -30
  657. package/SVF-doxygen/html/search/functions_b.js +2 -2
  658. package/SVF-doxygen/html/search/functions_c.js +25 -25
  659. package/SVF-doxygen/html/search/functions_d.js +81 -80
  660. package/SVF-doxygen/html/search/functions_e.js +36 -35
  661. package/SVF-doxygen/html/search/functions_f.js +58 -58
  662. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  663. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  664. package/SVF-doxygen/html/search/related_0.js +4 -2
  665. package/SVF-doxygen/html/search/related_1.js +2 -2
  666. package/SVF-doxygen/html/search/related_2.js +3 -3
  667. package/SVF-doxygen/html/search/related_3.js +2 -2
  668. package/SVF-doxygen/html/search/related_4.js +2 -2
  669. package/SVF-doxygen/html/search/related_5.js +1 -1
  670. package/SVF-doxygen/html/search/related_6.js +2 -2
  671. package/SVF-doxygen/html/search/related_7.js +4 -4
  672. package/SVF-doxygen/html/search/related_8.js +2 -2
  673. package/SVF-doxygen/html/search/related_9.js +4 -4
  674. package/SVF-doxygen/html/search/related_a.js +19 -19
  675. package/SVF-doxygen/html/search/related_b.js +4 -4
  676. package/SVF-doxygen/html/search/related_c.js +2 -2
  677. package/SVF-doxygen/html/search/related_d.js +12 -12
  678. package/SVF-doxygen/html/search/related_e.js +2 -2
  679. package/SVF-doxygen/html/search/related_f.js +2 -2
  680. package/SVF-doxygen/html/search/typedefs_0.js +20 -20
  681. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  682. package/SVF-doxygen/html/search/typedefs_10.js +63 -63
  683. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  684. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  685. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  686. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  687. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  688. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  689. package/SVF-doxygen/html/search/typedefs_4.js +18 -18
  690. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  691. package/SVF-doxygen/html/search/typedefs_6.js +57 -57
  692. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  693. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  694. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  695. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  696. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  697. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  698. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  699. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  700. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  701. package/SVF-doxygen/html/search/variables_0.js +182 -154
  702. package/SVF-doxygen/html/search/variables_1.js +76 -76
  703. package/SVF-doxygen/html/search/variables_10.js +98 -98
  704. package/SVF-doxygen/html/search/variables_11.js +46 -45
  705. package/SVF-doxygen/html/search/variables_12.js +93 -93
  706. package/SVF-doxygen/html/search/variables_13.js +76 -75
  707. package/SVF-doxygen/html/search/variables_14.js +14 -14
  708. package/SVF-doxygen/html/search/variables_15.js +49 -49
  709. package/SVF-doxygen/html/search/variables_16.js +11 -10
  710. package/SVF-doxygen/html/search/variables_17.js +1 -1
  711. package/SVF-doxygen/html/search/variables_18.js +17 -17
  712. package/SVF-doxygen/html/search/variables_2.js +41 -38
  713. package/SVF-doxygen/html/search/variables_3.js +142 -142
  714. package/SVF-doxygen/html/search/variables_4.js +51 -51
  715. package/SVF-doxygen/html/search/variables_5.js +39 -39
  716. package/SVF-doxygen/html/search/variables_6.js +66 -66
  717. package/SVF-doxygen/html/search/variables_7.js +34 -33
  718. package/SVF-doxygen/html/search/variables_8.js +8 -8
  719. package/SVF-doxygen/html/search/variables_9.js +78 -78
  720. package/SVF-doxygen/html/search/variables_a.js +4 -4
  721. package/SVF-doxygen/html/search/variables_b.js +10 -10
  722. package/SVF-doxygen/html/search/variables_c.js +45 -45
  723. package/SVF-doxygen/html/search/variables_d.js +57 -55
  724. package/SVF-doxygen/html/search/variables_e.js +123 -123
  725. package/SVF-doxygen/html/search/variables_f.js +31 -30
  726. package/SVF-doxygen/html/structSVF_1_1BufOverflowException-members.html +100 -0
  727. package/SVF-doxygen/html/structSVF_1_1BufOverflowException.html +663 -0
  728. package/SVF-doxygen/html/structSVF_1_1BufOverflowException.png +0 -0
  729. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +102 -102
  730. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01Inverse_3_01SVF_1_1CFBasicBlockNode_01_5_01_4_01_4.html +1 -1
  731. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockGraph_01_5_01_4.html +2 -2
  732. package/SVF-doxygen/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1CFBasicBlockNode_01_5_01_4.html +1 -1
  733. package/SVF-doxygen/html/structSVF_1_1GrammarBase_1_1Symbol.html +1 -1
  734. package/SVF-doxygen/html/structSVF_1_1Hash.html +8 -8
  735. package/SVF-doxygen/html/structSVF_1_1Hash_3_01NodePair_01_4.html +11 -11
  736. package/SVF-doxygen/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +14 -14
  737. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +1 -1
  738. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1BoundedZ3Expr_01_4.html +1 -1
  739. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
  740. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ConsExeState_01_4.html +7 -7
  741. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
  742. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  743. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +6 -6
  744. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +1 -1
  745. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +11 -11
  746. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NumericLiteral_01_4.html +6 -6
  747. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1RelExeState_01_4.html +1 -1
  748. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SingleAbsValue_01_4.html +1 -1
  749. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +8 -8
  750. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  751. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4.html +2 -2
  752. package/SVF-doxygen/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +15 -15
  753. package/SVF-doxygen/html/svf-ex_8cpp.html +193 -193
  754. package/SVF-doxygen/html/svf-ex_8cpp_source.html +212 -213
  755. package/SVF-doxygen/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +2 -2
  756. package/SVF-doxygen/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +2 -2
  757. package/package.json +1 -1
  758. package/svf/include/{AbstractExecution → AE/Core}/AbstractValue.h +0 -1
  759. package/svf/include/{AbstractExecution → AE/Core}/AddressValue.h +6 -4
  760. package/svf/include/{AbstractExecution → AE/Core}/CFBasicBlockGWTO.h +2 -0
  761. package/svf/include/{AbstractExecution → AE/Core}/ConsExeState.h +5 -3
  762. package/svf/include/{AbstractExecution → AE/Core}/ExeState.h +3 -2
  763. package/svf/include/{AbstractExecution → AE/Core}/IntervalExeState.h +2 -2
  764. package/svf/include/{AbstractExecution → AE/Core}/IntervalValue.h +2 -2
  765. package/svf/include/{AbstractExecution → AE/Core}/NumericLiteral.h +2 -4
  766. package/svf/include/{AbstractExecution → AE/Core}/RelExeState.h +1 -1
  767. package/svf/include/{AbstractExecution → AE/Core}/RelationSolver.h +1 -1
  768. package/svf/include/{AbstractExecution → AE/Core}/SingleAbsValue.h +1 -1
  769. package/svf/include/{AbstractExecution → AE/Core}/SymState.h +1 -1
  770. package/svf/include/AE/Svfexe/AE.h +434 -0
  771. package/svf/include/AE/Svfexe/BufOverflowChecker.h +223 -0
  772. package/svf/include/{AbstractExecution → AE/Svfexe}/SVFIR2ConsExeState.h +1 -1
  773. package/svf/include/{AbstractExecution → AE/Svfexe}/SVFIR2ItvExeState.h +4 -4
  774. package/svf/include/Graphs/CFBasicBlockG.h +6 -0
  775. package/svf/include/SVFIR/SVFType.h +2 -88
  776. package/svf/include/Util/CFBasicBlockGBuilder.h +5 -0
  777. package/svf/include/Util/GeneralType.h +123 -0
  778. package/svf/include/Util/Options.h +11 -0
  779. package/svf/lib/{AbstractExecution → AE/Core}/BoundedZ3Expr.cpp +1 -1
  780. package/svf/lib/{AbstractExecution → AE/Core}/ConsExeState.cpp +2 -5
  781. package/svf/lib/{AbstractExecution → AE/Core}/ExeState.cpp +2 -2
  782. package/svf/lib/{AbstractExecution → AE/Core}/IntervalExeState.cpp +1 -1
  783. package/svf/lib/{AbstractExecution → AE/Core}/RelExeState.cpp +3 -2
  784. package/svf/lib/{AbstractExecution → AE/Core}/RelationSolver.cpp +1 -1
  785. package/svf/lib/{AbstractExecution → AE/Core}/SVFIR2Relation.cpp +1 -1
  786. package/svf/lib/{AbstractExecution → AE/Core}/SymState.cpp +1 -1
  787. package/svf/lib/AE/Svfexe/AE.cpp +1833 -0
  788. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +839 -0
  789. package/svf/lib/{AbstractExecution → AE/Svfexe}/SVFIR2ConsExeState.cpp +1 -1
  790. package/svf/lib/{AbstractExecution → AE/Svfexe}/SVFIR2ItvExeState.cpp +1 -1
  791. package/svf/lib/Util/Options.cpp +13 -0
  792. package/svf-llvm/tools/AE/CMakeLists.txt +1 -0
  793. package/svf-llvm/tools/AE/ae.cpp +91 -26
  794. package/svf-llvm/tools/Example/svf-ex.cpp +3 -4
  795. /package/svf/include/{AbstractExecution → AE/Core}/BoundedZ3Expr.h +0 -0
  796. /package/svf/include/{AbstractExecution → AE/Core}/ICFGWTO.h +0 -0
@@ -0,0 +1,1040 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
+ <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6
+ <meta name="generator" content="Doxygen 1.8.17"/>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
8
+ <title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/svf/lib/AE/Svfexe/BufOverflowChecker.cpp Source File</title>
9
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
10
+ <script type="text/javascript" src="jquery.js"></script>
11
+ <script type="text/javascript" src="dynsections.js"></script>
12
+ <link href="search/search.css" rel="stylesheet" type="text/css"/>
13
+ <script type="text/javascript" src="search/searchdata.js"></script>
14
+ <script type="text/javascript" src="search/search.js"></script>
15
+ <link href="doxygen.css" rel="stylesheet" type="text/css" />
16
+ </head>
17
+ <body>
18
+ <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19
+ <div id="titlearea">
20
+ <table cellspacing="0" cellpadding="0">
21
+ <tbody>
22
+ <tr style="height: 56px;">
23
+ <td id="projectalign" style="padding-left: 0.5em;">
24
+ <div id="projectname">Static Value-Flow Analysis
25
+ </div>
26
+ </td>
27
+ </tr>
28
+ </tbody>
29
+ </table>
30
+ </div>
31
+ <!-- end header part -->
32
+ <!-- Generated by Doxygen 1.8.17 -->
33
+ <script type="text/javascript">
34
+ /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
35
+ var searchBox = new SearchBox("searchBox", "search",false,'Search');
36
+ /* @license-end */
37
+ </script>
38
+ <script type="text/javascript" src="menudata.js"></script>
39
+ <script type="text/javascript" src="menu.js"></script>
40
+ <script type="text/javascript">
41
+ /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
42
+ $(function() {
43
+ initMenu('',true,false,'search.php','Search');
44
+ $(document).ready(function() { init_search(); });
45
+ });
46
+ /* @license-end */</script>
47
+ <div id="main-nav"></div>
48
+ <!-- window showing the filter options -->
49
+ <div id="MSearchSelectWindow"
50
+ onmouseover="return searchBox.OnSearchSelectShow()"
51
+ onmouseout="return searchBox.OnSearchSelectHide()"
52
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
53
+ </div>
54
+
55
+ <!-- iframe showing the search results (closed by default) -->
56
+ <div id="MSearchResultsWindow">
57
+ <iframe src="javascript:void(0)" frameborder="0"
58
+ name="MSearchResults" id="MSearchResults">
59
+ </iframe>
60
+ </div>
61
+
62
+ <div id="nav-path" class="navpath">
63
+ <ul>
64
+ <li class="navelem"><a class="el" href="dir_f984cfbe93434e3daf67f2a9bd6d521f.html">svf</a></li><li class="navelem"><a class="el" href="dir_946e55d8e7afdb1629c1e1d7cdc5486a.html">lib</a></li><li class="navelem"><a class="el" href="dir_7e02b97230e2801c6749b0b00985526f.html">AE</a></li><li class="navelem"><a class="el" href="dir_81caa96ab1d3de93b353e2bbe80e6067.html">Svfexe</a></li> </ul>
65
+ </div>
66
+ </div><!-- top -->
67
+ <div class="header">
68
+ <div class="headertitle">
69
+ <div class="title">BufOverflowChecker.cpp</div> </div>
70
+ </div><!--header-->
71
+ <div class="contents">
72
+ <a href="BufOverflowChecker_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- BufOverflowChecker.cpp -- BufOVerflowChecker Client for Abstract Execution---//</span></div>
73
+ <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
74
+ <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div>
75
+ <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div>
76
+ <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div>
77
+ <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div>
78
+ <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
79
+ <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div>
80
+ <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU Affero General Public License as published by</span></div>
81
+ <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div>
82
+ <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div>
83
+ <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
84
+ <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div>
85
+ <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
86
+ <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
87
+ <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU Affero General Public License for more details.</span></div>
88
+ <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
89
+ <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU Affero General Public License</span></div>
90
+ <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div>
91
+ <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div>
92
+ <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div>
93
+ <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
94
+ <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
95
+ <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">//</span></div>
96
+ <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// Created by Jiawei Wang on 2024/1/12.</span></div>
97
+ <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">//</span></div>
98
+ <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
99
+ <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="BufOverflowChecker_8h.html">AE/Svfexe/BufOverflowChecker.h</a>&quot;</span></div>
100
+ <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFType_8h.html">SVFIR/SVFType.h</a>&quot;</span></div>
101
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div>
102
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;climits&gt;</span></div>
103
+ <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
104
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div>
105
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
107
+ <div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431"> 36</a></span>&#160;<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>&amp; inv)</div>
108
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
109
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (inv.<a class="code" href="classSVF_1_1IntervalValue.html#a3dba35c84607bd3ed4e62a90ae2799cf">is_infinite</a>())</div>
110
+ <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
111
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> inv.<a class="code" href="classSVF_1_1IntervalValue.html#a5d73cc2aa0a6ed49e8301fa7b0cd5045">toString</a>();</div>
112
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
113
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">else</span></div>
114
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
115
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; int64_t lb_val = inv.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>();</div>
116
+ <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; int64_t ub_val = inv.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>();</div>
117
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
118
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// check lb</span></div>
119
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> lb_s32 = (lb_val &lt; static_cast&lt;int64_t&gt;(INT_MIN)) ? INT_MIN :</div>
120
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; (lb_val &gt; <span class="keyword">static_cast&lt;</span>int64_t<span class="keyword">&gt;</span>(INT_MAX)) ? INT_MAX :</div>
121
+ <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a><span class="keyword">&gt;</span>(lb_val);</div>
122
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
123
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// check ub</span></div>
124
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> ub_s32 = (ub_val &lt; static_cast&lt;int64_t&gt;(INT_MIN)) ? INT_MIN :</div>
125
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; (ub_val &gt; <span class="keyword">static_cast&lt;</span>int64_t<span class="keyword">&gt;</span>(INT_MAX)) ? INT_MAX :</div>
126
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a><span class="keyword">&gt;</span>(ub_val);</div>
127
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
128
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;[&quot;</span> + std::to_string(lb_s32) + <span class="stringliteral">&quot;, &quot;</span> + std::to_string(ub_s32) + <span class="stringliteral">&quot;]&quot;</span>;</div>
129
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
130
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
131
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
132
+ <div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowChecker.html#a0b79c3694a08100d2d8d1b8109998131"> 61</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#a0b79c3694a08100d2d8d1b8109998131">BufOverflowChecker::handleSVFStatement</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt)</div>
133
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
134
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classSVF_1_1AE.html#a0fdd00ba2e2c826043bb481e67fae397">AE::handleSVFStatement</a>(stmt);</div>
135
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// for gep stmt, add the gep stmt to the addrToGep map</span></div>
136
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
137
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
138
+ <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> addrID: <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(gep-&gt;getLHSVarID()))</div>
139
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
140
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> objId = <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(addrID);</div>
141
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span>* extapi = SVFUtil::dyn_cast&lt;BufOverflowCheckerAPI&gt;(<a class="code" href="classSVF_1_1AE.html#ae421183ec34d08f02a484f3c025e10d7">_api</a>))</div>
142
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; extapi-&gt;_addrToGep[objId] = gep;</div>
143
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
144
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
145
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
146
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
147
+ <div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#a950ff9c290eef3ed8b4343aaa527946e"> 76</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a950ff9c290eef3ed8b4343aaa527946e">BufOverflowCheckerAPI::initExtAPIBufOverflowCheckRules</a>()</div>
148
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;{</div>
149
+ <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>
150
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
151
+ <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>
152
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
153
+ <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>
154
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
155
+ <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>
156
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memcpy&quot;</span>] = {{0, 2}, {1,2}};</div>
157
+ <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>
158
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
159
+ <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>
160
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
161
+ <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>
162
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0_p0_i64&quot;</span>] = {{0, 2}, {1,2}};</div>
163
+ <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>
164
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memmove_p0i8_p0i8_i32&quot;</span>] = {{0, 2}, {1,2}};</div>
165
+ <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>
166
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memcpy_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
167
+ <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>
168
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memmove&quot;</span>] = {{0, 2}, {1,2}};</div>
169
+ <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>
170
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;bcopy&quot;</span>] = {{0, 2}, {1,2}};</div>
171
+ <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>
172
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;memccpy&quot;</span>] = {{0, 3}, {1,3}};</div>
173
+ <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>
174
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memmove_chk&quot;</span>] = {{0, 2}, {1,2}};</div>
175
+ <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>
176
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset&quot;</span>] = {{0, 2}};</div>
177
+ <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>
178
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i32&quot;</span>] = {{0, 2}};</div>
179
+ <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>
180
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0i8_i64&quot;</span>] = {{0, 2}};</div>
181
+ <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>
182
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;llvm_memset_p0_i64&quot;</span>] = {{0, 2}};</div>
183
+ <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>
184
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;__memset_chk&quot;</span>] = {{0, 2}};</div>
185
+ <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>
186
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;wmemset&quot;</span>] = {{0, 2}};</div>
187
+ <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>
188
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;strncpy&quot;</span>] = {{0, 2}, {1,2}};</div>
189
+ <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>
190
+ <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>[<span class="stringliteral">&quot;iconv&quot;</span>] = {{1, 2}, {3, 4}};</div>
191
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;}</div>
192
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
193
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
194
+ <div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#a296a3ea0f8df72ce6480b5cb0f207945"> 123</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a296a3ea0f8df72ce6480b5cb0f207945">BufOverflowCheckerAPI::detectStrcpy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
195
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div>
196
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
197
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
198
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
199
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> strLen = <a class="code" href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">getStrlen</a>(arg1Val);</div>
200
+ <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>
201
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(arg0Val, strLen, call);</div>
202
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;}</div>
203
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
204
+ <div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#a49a9ee0125f2af00cc55c3224611f28e"> 133</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a49a9ee0125f2af00cc55c3224611f28e">BufOverflowCheckerAPI::initExtFunMap</a>()</div>
205
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
206
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
207
+ <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> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
208
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
209
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">//scanf(&quot;%d&quot;, &amp;data);</span></div>
210
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
211
+ <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>
212
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
213
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
214
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span> (!ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
215
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
216
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(1));</div>
217
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
218
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span>;</div>
219
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
220
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">else</span></div>
221
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
222
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a> <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a> = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
223
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a>)</div>
224
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
225
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
226
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> range = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
227
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; es.<a class="code" href="classSVF_1_1IntervalESBase.html#adb26b186ee31bce7449a7b36faa24cc2">store</a>(vaddr, range);</div>
228
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
229
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
230
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; };</div>
231
+ <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> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
232
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
233
+ <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>
234
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
235
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
236
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
237
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
238
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (!ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(dst_id))</div>
239
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {</div>
240
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(<span class="stringliteral">&quot;scanf may cause buffer overflow.\n&quot;</span>, 0, 0, 0, 0, cs.getArgument(2));</div>
241
+ <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
242
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span>;</div>
243
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div>
244
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">else</span></div>
245
+ <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
246
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a> <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a> = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(dst_id);</div>
247
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: <a class="code" href="classSVF_1_1AddressValue.html">Addrs</a>)</div>
248
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {</div>
249
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
250
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> range = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#afbb9ff1f2c47d2afda117bf63a80a1a7">getRangeLimitFromType</a>(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
251
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; es.<a class="code" href="classSVF_1_1IntervalESBase.html#adb26b186ee31bce7449a7b36faa24cc2">store</a>(vaddr, range);</div>
252
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
253
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
254
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; };</div>
255
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
256
+ <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__isoc99_fscanf&quot;</span>] = sse_fscanf;</div>
257
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__isoc99_scanf&quot;</span>] = sse_scanf;</div>
258
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__isoc99_vscanf&quot;</span>] = sse_scanf;</div>
259
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;fscanf&quot;</span>] = sse_fscanf;</div>
260
+ <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;scanf&quot;</span>] = sse_scanf;</div>
261
+ <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;sscanf&quot;</span>] = sse_scanf;</div>
262
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__isoc99_sscanf&quot;</span>] = sse_scanf;</div>
263
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;vscanf&quot;</span>] = sse_scanf;</div>
264
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
265
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">auto</span> sse_fread = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
266
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div>
267
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
268
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
269
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
270
+ <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> block_count_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
271
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> block_size_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
272
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> block_count = es[block_count_id];</div>
273
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> block_size = es[block_size_id];</div>
274
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> block_byte = block_count * block_size;</div>
275
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(0), block_byte, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
276
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; };</div>
277
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;fread&quot;</span>] = sse_fread;</div>
278
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
279
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">auto</span> sse_sprintf = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
280
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
281
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="comment">// printf is difficult to predict since it has no byte size arguments</span></div>
282
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; };</div>
283
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
284
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">auto</span> sse_snprintf = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
285
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
286
+ <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
287
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
288
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
289
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
290
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> dst_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
291
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// get elem size of arg2</span></div>
292
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
293
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isArrayTy())</div>
294
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
295
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(cs.getArgument(2)-&gt;getType())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
296
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
297
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cs.getArgument(2)-&gt;getType()-&gt;isPointerTy())</div>
298
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
299
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; elemSize = <a class="code" href="classSVF_1_1AEAPI.html#a112519b672206ac552273666949eeb3b">getPointeeElement</a>(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
300
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
301
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">else</span></div>
302
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
303
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span>;</div>
304
+ <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// assert(false &amp;&amp; &quot;we cannot support this type&quot;);</span></div>
305
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
306
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> size = es[size_id] * <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(elemSize) - <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1);</div>
307
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (!es.<a class="code" href="classSVF_1_1IntervalExeState.html#ad485a35730353c0e945bc84a034d9e45">inVarToAddrsTable</a>(dst_id))</div>
308
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
309
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#afbe432aabda95308e2c190a04d227a6d">Options::BufferOverflowCheck</a>())</div>
310
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div>
311
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(</div>
312
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="stringliteral">&quot;snprintf dst_id or dst is not defined nor initializesd.\n&quot;</span>,</div>
313
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; 0, 0, 0, 0, cs.getArgument(0));</div>
314
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
315
+ <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">return</span>;</div>
316
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
317
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
318
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(0), size, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
319
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; };</div>
320
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__snprintf_chk&quot;</span>] = sse_snprintf;</div>
321
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__vsprintf_chk&quot;</span>] = sse_sprintf;</div>
322
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__sprintf_chk&quot;</span>] = sse_sprintf;</div>
323
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;snprintf&quot;</span>] = sse_snprintf;</div>
324
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;sprintf&quot;</span>] = sse_sprintf;</div>
325
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;vsprintf&quot;</span>] = sse_sprintf;</div>
326
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;vsnprintf&quot;</span>] = sse_snprintf;</div>
327
+ <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__vsnprintf_chk&quot;</span>] = sse_snprintf;</div>
328
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;swprintf&quot;</span>] = sse_snprintf;</div>
329
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;_snwprintf&quot;</span>] = sse_snprintf;</div>
330
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
331
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
332
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">auto</span> sse_itoa = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
333
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div>
334
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// itoa(num, ch, 10);</span></div>
335
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// num: int, ch: char*, 10 is decimal</span></div>
336
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
337
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 3) <span class="keywordflow">return</span>;</div>
338
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
339
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(0));</div>
340
+ <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
341
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) es[num_id].getNumeral();</div>
342
+ <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> snum = std::to_string(num);</div>
343
+ <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(1), <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>((<a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a>)snum.size()), <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
344
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; };</div>
345
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;itoa&quot;</span>] = sse_itoa;</div>
346
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
347
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
348
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">auto</span> sse_strlen = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
349
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
350
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// check the arg size</span></div>
351
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
352
+ <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 1) <span class="keywordflow">return</span>;</div>
353
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* strValue = cs.getArgument(0);</div>
354
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
355
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> dst_size = <a class="code" href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">getStrlen</a>(strValue);</div>
356
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> elemSize = 1;</div>
357
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
358
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
359
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; elemSize = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>())-&gt;getTypeOfElement()-&gt;getByteSize();</div>
360
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
361
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">getType</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">isPointerTy</a>())</div>
362
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
363
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; elemSize = <a class="code" href="classSVF_1_1AEAPI.html#a112519b672206ac552273666949eeb3b">getPointeeElement</a>(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
364
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
365
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
366
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; es[lhsId] = dst_size / <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(elemSize);</div>
367
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; };</div>
368
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;strlen&quot;</span>] = sse_strlen;</div>
369
+ <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;wcslen&quot;</span>] = sse_strlen;</div>
370
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
371
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">auto</span> sse_recv = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
372
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div>
373
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// recv(sockfd, buf, len, flags);</span></div>
374
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
375
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 4) <span class="keywordflow">return</span>;</div>
376
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
377
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> len_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(2));</div>
378
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> len = es[len_id] - <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1);</div>
379
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lhsId = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getInstruction());</div>
380
+ <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; es[lhsId] = len;</div>
381
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(1), len, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
382
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; };</div>
383
+ <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;recv&quot;</span>] = sse_recv;</div>
384
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;__recv&quot;</span>] = sse_recv;</div>
385
+ <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">auto</span> safe_bufaccess = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
386
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
387
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
388
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ad364ccca2d91efa83263fad7ed196361">_checkpoints</a>.erase(callNode);</div>
389
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">//void SAFE_BUFACCESS(void* data, int size);</span></div>
390
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
391
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
392
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
393
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
394
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> val = es[size_id];</div>
395
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">isBottom</a>())</div>
396
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div>
397
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; val = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0);</div>
398
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;SAFE_BUFACCESS size is bottom&quot;</span>);</div>
399
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div>
400
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
401
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (isSafe)</div>
402
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
403
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;safe buffer access success\n&quot;</span>;</div>
404
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span>;</div>
405
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
406
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">else</span></div>
407
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div>
408
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</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>
409
+ <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
410
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
411
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; assert(<span class="keyword">false</span>);</div>
412
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
413
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; };</div>
414
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>] = safe_bufaccess;</div>
415
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
416
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">auto</span> unsafe_bufaccess = [&amp;](<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> &amp;cs)</div>
417
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
418
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
419
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ad364ccca2d91efa83263fad7ed196361">_checkpoints</a>.erase(callNode);</div>
420
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">//void UNSAFE_BUFACCESS(void* data, int size);</span></div>
421
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
422
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (cs.arg_size() &lt; 2) <span class="keywordflow">return</span>;</div>
423
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="classSVF_1_1IntervalExeState.html">IntervalExeState</a> &amp;es = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>();</div>
424
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> size_id = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.getArgument(1));</div>
425
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> val = es[size_id];</div>
426
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (val.<a class="code" href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">isBottom</a>())</div>
427
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
428
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;UNSAFE_BUFACCESS size is bottom&quot;</span>);</div>
429
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
430
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">bool</span> isSafe = <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.getArgument(0), val, <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>
431
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span> (!isSafe)</div>
432
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
433
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; std::cout &lt;&lt; <span class="stringliteral">&quot;detect buffer overflow success\n&quot;</span>;</div>
434
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">return</span>;</div>
435
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
436
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">else</span></div>
437
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div>
438
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// if it is safe, it means it is wrongly labeled, assert false.</span></div>
439
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</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>
440
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; err_msg += cs.getInstruction()-&gt;getSourceLoc();</div>
441
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; std::cerr &lt;&lt; err_msg &lt;&lt; std::endl;</div>
442
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; assert(<span class="keyword">false</span>);</div>
443
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div>
444
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; };</div>
445
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">_func_map</a>[<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>] = unsafe_bufaccess;</div>
446
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; </div>
447
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// init _checkpoint_names</span></div>
448
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ace3e82bcfbb4495a765e01d75a58dc3f">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;SAFE_BUFACCESS&quot;</span>);</div>
449
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ace3e82bcfbb4495a765e01d75a58dc3f">_checkpoint_names</a>.insert(<span class="stringliteral">&quot;UNSAFE_BUFACCESS&quot;</span>);</div>
450
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;}</div>
451
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
452
+ <div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#ae88696790ca4f3392c7dc76c74619f46"> 381</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#ae88696790ca4f3392c7dc76c74619f46">BufOverflowCheckerAPI::detectStrcat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
453
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div>
454
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
455
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
456
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// check the arg size</span></div>
457
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// if it is strcat group, we need to check the length of string,</span></div>
458
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// e.g. strcat(str1, str2); which checks AllocSize(str1) &gt;= Strlen(str1) + Strlen(str2);</span></div>
459
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// if it is strncat group, we do not need to check the length of string,</span></div>
460
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// e.g. strncat(str1, str2, n); which checks AllocSize(str1) &gt;= Strlen(str1) + n;</span></div>
461
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
462
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</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>
463
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</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>
464
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (std::find(strcatGroup.begin(), strcatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strcatGroup.end())</div>
465
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
466
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
467
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
468
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg1Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(1);</div>
469
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> strLen0 = <a class="code" href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">getStrlen</a>(arg0Val);</div>
470
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> strLen1 = <a class="code" href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">getStrlen</a>(arg1Val);</div>
471
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> totalLen = strLen0 + strLen1;</div>
472
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
473
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div>
474
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::find(strncatGroup.begin(), strncatGroup.end(), fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) != strncatGroup.end())</div>
475
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
476
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
477
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg0Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(0);</div>
478
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* arg2Val = cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(2);</div>
479
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> arg2Num = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(arg2Val)];</div>
480
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> strLen0 = <a class="code" href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">getStrlen</a>(arg0Val);</div>
481
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> totalLen = strLen0 + arg2Num;</div>
482
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(arg0Val, totalLen, call);</div>
483
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
484
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">else</span></div>
485
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
486
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</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>
487
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div>
488
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;}</div>
489
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div>
490
+ <div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#a6a4afd9b4546d0a01dc869c6672f6dc6"> 419</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a6a4afd9b4546d0a01dc869c6672f6dc6">BufOverflowCheckerAPI::handleExtAPI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *call)</div>
491
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;{</div>
492
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#af64d742317f2ddad87b87012225ddaaa">AEAPI::handleExtAPI</a>(call);</div>
493
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = SVFUtil::dyn_cast&lt;BufOverflowChecker&gt;(<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
494
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
495
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; assert(fun &amp;&amp; <span class="stringliteral">&quot;SVFFunction* is nullptr&quot;</span>);</div>
496
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div>
497
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// check the type of mem api,</span></div>
498
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="comment">// MEMCPY: like memcpy, memcpy_chk, llvm.memcpy etc.</span></div>
499
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// MEMSET: like memset, memset_chk, llvm.memset etc.</span></div>
500
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="comment">// STRCPY: like strcpy, strcpy_chk, wcscpy etc.</span></div>
501
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// STRCAT: like strcat, strcat_chk, wcscat etc.</span></div>
502
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// for other ext api like printf, scanf, etc., they have their own handlers</span></div>
503
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04">ExtAPIType</a> extType = <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a2dc334d7904e139e2e2b5e9eb2a1bb0a">UNCLASSIFIED</a>;</div>
504
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// get type of mem api</span></div>
505
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</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;<a class="code" href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">getAnnotations</a>())</div>
506
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
507
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMCPY&quot;</span>) != std::string::npos)</div>
508
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; extType = <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a9a492bae5e1779267055b83cf033da28">MEMCPY</a>;</div>
509
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;MEMSET&quot;</span>) != std::string::npos)</div>
510
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; extType = <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a68863d4626b3cde194a0fa6da74a3313">MEMSET</a>;</div>
511
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCPY&quot;</span>) != std::string::npos)</div>
512
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; extType = <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04aadccf4db29e170b4d669ef023866a28d">STRCPY</a>;</div>
513
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (annotation.find(<span class="stringliteral">&quot;STRCAT&quot;</span>) != std::string::npos)</div>
514
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; extType = <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04ab8167323edeff68403cf4ceb7e8133d9">STRCAT</a>;</div>
515
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div>
516
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</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>
517
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a9a492bae5e1779267055b83cf033da28">MEMCPY</a>)</div>
518
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
519
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) == 0)</div>
520
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div>
521
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
522
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</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;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
523
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span>;</div>
524
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div>
525
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// call parseMemcpyBufferCheckArgs to parse the BUF_CHECK annotation</span></div>
526
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>());</div>
527
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
528
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
529
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div>
530
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(arg.second))] - <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1);</div>
531
+ <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
532
+ <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
533
+ <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
534
+ <div class="line"><a name="l00463"></a><span class="lineno"> 463</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>
535
+ <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a68863d4626b3cde194a0fa6da74a3313">MEMSET</a>)</div>
536
+ <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div>
537
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>.count(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>()) == 0)</div>
538
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; {</div>
539
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// if it is not in the rules, we do not check it</span></div>
540
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</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;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>() &lt;&lt; <span class="stringliteral">&quot; is not in the rules, please implement it\n&quot;</span>;</div>
541
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span>;</div>
542
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div>
543
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; std::vector&lt;std::pair&lt;u32_t, u32_t&gt;&gt; args = <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">_extAPIBufOverflowCheckRules</a>.at(fun-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">getName</a>());</div>
544
+ <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// loop the args and check the offset</span></div>
545
+ <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> arg: args)</div>
546
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div>
547
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(arg.second))] - <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(1);</div>
548
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">canSafelyAccessMemory</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">getArgument</a>(arg.first), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, call);</div>
549
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
550
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
551
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04aadccf4db29e170b4d669ef023866a28d">STRCPY</a>)</div>
552
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div>
553
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a296a3ea0f8df72ce6480b5cb0f207945">detectStrcpy</a>(call);</div>
554
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
555
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (extType == <a class="code" href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04ab8167323edeff68403cf4ceb7e8133d9">STRCAT</a>)</div>
556
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div>
557
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#ae88696790ca4f3392c7dc76c74619f46">detectStrcat</a>(call);</div>
558
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div>
559
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">else</span></div>
560
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; {</div>
561
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; </div>
562
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div>
563
+ <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">return</span>;</div>
564
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;}</div>
565
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; </div>
566
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; </div>
567
+ <div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowChecker.html#a13b4beca209f7d306cf0a6065987a489"> 496</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#a13b4beca209f7d306cf0a6065987a489">BufOverflowChecker::handleICFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a> *node)</div>
568
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;{</div>
569
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="classSVF_1_1AE.html#aefab5dde7df823dc4038fe3f1918624d">AE::handleICFGNode</a>(node);</div>
570
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html#a52de7d619e8746a70718719306d7c5a1">detectBufOverflow</a>(node);</div>
571
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;}</div>
572
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; </div>
573
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment">//</span></div>
574
+ <div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowChecker.html#a52de7d619e8746a70718719306d7c5a1"> 503</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#a52de7d619e8746a70718719306d7c5a1">BufOverflowChecker::detectBufOverflow</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node)</div>
575
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div>
576
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; </div>
577
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keyword">auto</span> *extapi = SVFUtil::dyn_cast&lt;BufOverflowCheckerAPI&gt;(<a class="code" href="classSVF_1_1AE.html#ae421183ec34d08f02a484f3c025e10d7">_api</a>);</div>
578
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>* stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
579
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
580
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
581
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; {</div>
582
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* gepRhs = gep-&gt;getRHSVar();</div>
583
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(gepRhs-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>()))</div>
584
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
585
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1AE.html#af42ae42a73107e29133c481f94a9161f">_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>(inst);</div>
586
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* stmt2: icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
587
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
588
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep2 = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt2))</div>
589
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div>
590
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">return</span> extapi-&gt;canSafelyAccessMemory(gep2-&gt;getLHSVar()-&gt;getValue(), <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0), node);</div>
591
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
592
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
593
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div>
594
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div>
595
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
596
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div>
597
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(load-&gt;getRHSVarID()))</div>
598
+ <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
599
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="classSVF_1_1AddressValue.html">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(load-&gt;getRHSVarID());</div>
600
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
601
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div>
602
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
603
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (extapi-&gt;_addrToGep.find(objId) != extapi-&gt;_addrToGep.end())</div>
604
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div>
605
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gep = extapi-&gt;_addrToGep.at(objId);</div>
606
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> extapi-&gt;canSafelyAccessMemory(gep-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>()-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>(), <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0), node);</div>
607
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
608
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
609
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
610
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
611
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::dyn_cast&lt;StoreStmt&gt;(stmt))</div>
612
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
613
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a999c358b80dd07591b0432eaa41c20c9">inVarToAddrsTable</a>(store-&gt;getLHSVarID()))</div>
614
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
615
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="classSVF_1_1AddressValue.html">ExeState::Addrs</a> Addrs = <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a48fec38aad1c2a9a140ee94e9fdd7e9b">getAddrs</a>(store-&gt;getLHSVarID());</div>
616
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> vaddr: Addrs)</div>
617
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {</div>
618
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> objId = <a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a66c426719f583653cb70189f01d6fda5">getInternalID</a>(vaddr);</div>
619
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (extapi-&gt;_addrToGep.find(objId) != extapi-&gt;_addrToGep.end())</div>
620
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {</div>
621
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gep = extapi-&gt;_addrToGep.at(objId);</div>
622
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> extapi-&gt;canSafelyAccessMemory(gep-&gt;<a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>()-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>(), <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0), node);</div>
623
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
624
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
625
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
626
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div>
627
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
628
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
629
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;}</div>
630
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
631
+ <div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75"> 560</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">BufOverflowChecker::addBugToRecoder</a>(<span class="keyword">const</span> <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a>&amp; e, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node)</div>
632
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;{</div>
633
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = <span class="keyword">nullptr</span>;</div>
634
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
635
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div>
636
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; inst = call-&gt;getCallSite();</div>
637
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; }</div>
638
+ <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">else</span></div>
639
+ <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div>
640
+ <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; inst = node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>().back()-&gt;getInst();</div>
641
+ <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
642
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="classSVF_1_1GenericBug.html#acc65b033bfd61257d5b6fdbf932dfafe">GenericBug::EventStack</a> eventStack;</div>
643
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classSVF_1_1SVFBugEvent.html">SVFBugEvent</a> sourceInstEvent(SVFBugEvent::EventType::SourceInst, inst);</div>
644
+ <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;callsite: <a class="code" href="classSVF_1_1AE.html#a89e523198459de07937a9961f57db2d1">_callSiteStack</a>)</div>
645
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div>
646
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classSVF_1_1SVFBugEvent.html">SVFBugEvent</a> callSiteEvent(SVFBugEvent::EventType::CallSite, callsite-&gt;getCallSite());</div>
647
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; eventStack.push_back(callSiteEvent);</div>
648
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div>
649
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; eventStack.push_back(sourceInstEvent);</div>
650
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (eventStack.size() == 0) <span class="keywordflow">return</span>;</div>
651
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> loc = eventStack.back().getEventLoc();</div>
652
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1AE.html#a1194ad55118ba76071d858d66c964241">_bugLoc</a>.find(loc) != <a class="code" href="classSVF_1_1AE.html#a1194ad55118ba76071d858d66c964241">_bugLoc</a>.end())</div>
653
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div>
654
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">return</span>;</div>
655
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
656
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span></div>
657
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
658
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="classSVF_1_1AE.html#a1194ad55118ba76071d858d66c964241">_bugLoc</a>.insert(loc);</div>
659
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
660
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="classSVF_1_1AE.html#a73f74f2e9ecfd6870e98edee1ab6889c">_recoder</a>.<a class="code" href="classSVF_1_1SVFBugReport.html#a05f395eff23619ed10c31c0acda949e2">addAbsExecBug</a>(<a class="code" href="classSVF_1_1GenericBug.html#a7aeeb33097bca5f7fe6747f90f5cecacac88ddac03bb8ae09a72058e4ad7af747">GenericBug::FULLBUFOVERFLOW</a>, eventStack, e.<a class="code" href="structSVF_1_1BufOverflowException.html#af8a7272c33f826f0079d5a31f6c5d547">getAllocLb</a>(), e.<a class="code" href="structSVF_1_1BufOverflowException.html#a09144623a46e13e561db8b282440e6fc">getAllocUb</a>(), e.<a class="code" href="structSVF_1_1BufOverflowException.html#a9c169e68b0c793909d643e3e266434fe">getAccessLb</a>(),</div>
661
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; e.<a class="code" href="structSVF_1_1BufOverflowException.html#a95463e50b7e92f46cb095fd2a706257a">getAccessUb</a>());</div>
662
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="classSVF_1_1AE.html#a4ed21da186c37ab4e6a24ea26db2b5f2">_nodeToBugInfo</a>[node] = e.<a class="code" href="structSVF_1_1BufOverflowException.html#a4eb54eb3943f96e60f89d2fdd99f08c0">what</a>();</div>
663
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;}</div>
664
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; </div>
665
+ <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div>
666
+ <div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d"> 595</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">BufOverflowCheckerAPI::canSafelyAccessMemory</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *value, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> &amp;len, <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *curNode)</div>
667
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;{</div>
668
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>* ae = <span class="keyword">static_cast&lt;</span><a class="code" href="classSVF_1_1BufOverflowChecker.html">BufOverflowChecker</a>*<span class="keyword">&gt;</span>(this-&gt;<a class="code" href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">_ae</a>);</div>
669
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *firstValue = value;</div>
670
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; </div>
671
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList&lt;const SVFValue *&gt;</a> worklist;</div>
672
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;const SVFValue *&gt;</a> visited;</div>
673
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; visited.insert(value);</div>
674
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;const ICFGNode *, IntervalValue&gt;</a> gep_offsets;</div>
675
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> total_bytes = len;</div>
676
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(value);</div>
677
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; std::vector&lt;const CallICFGNode *&gt; callstack = ae-&gt;<a class="code" href="classSVF_1_1AE.html#a89e523198459de07937a9961f57db2d1">_callSiteStack</a>;</div>
678
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">while</span> (!worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">empty</a>())</div>
679
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div>
680
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; value = worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">pop</a>();</div>
681
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a> *ins = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(value))</div>
682
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div>
683
+ <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *node = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_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>(ins);</div>
684
+ <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a> *callnode = SVFUtil::dyn_cast&lt;CallICFGNode&gt;(node))</div>
685
+ <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div>
686
+ <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#a7be3da80bedb1077a99d67daa124afde">AccessMemoryViaRetNode</a>(callnode, worklist, visited);</div>
687
+ <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div>
688
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a> *stmt: node-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">getSVFStmts</a>())</div>
689
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div>
690
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a> *<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast&lt;CopyStmt&gt;(stmt))</div>
691
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div>
692
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#a3665513f6e8f8b93ef3f9d273d03ee70">AccessMemoryViaCopyStmt</a>(<a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>, worklist, visited);</div>
693
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div>
694
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *load = SVFUtil::dyn_cast&lt;LoadStmt&gt;(stmt))</div>
695
+ <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
696
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#afa34cb2ee3fc1ca5aa04a2afe7c2d6e8">AccessMemoryViaLoadStmt</a>(load, worklist, visited);</div>
697
+ <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div>
698
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a> *gep = SVFUtil::dyn_cast&lt;GepStmt&gt;(stmt))</div>
699
+ <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; {</div>
700
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="comment">// there are 3 type of gepStmt</span></div>
701
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">// 1. ptr get offset</span></div>
702
+ <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="comment">// 2. struct get field</span></div>
703
+ <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="comment">// 3. array get element</span></div>
704
+ <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// for array gep, there are two kind of overflow checking</span></div>
705
+ <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// Arr [Struct.C * 10] arr, Struct.C {i32 a, i32 b}</span></div>
706
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">// arr[11].a = **, it is &quot;lhs = gep *arr, 0 (ptr), 11 (arrIdx), 0 (ptr), 0(struct field)&quot;</span></div>
707
+ <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">// 1) in this case arrIdx 11 is overflow.</span></div>
708
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="comment">// Other case,</span></div>
709
+ <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="comment">// Struct.C {i32 a, [i32*10] b, i32 c}, C.b[11] = 1</span></div>
710
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="comment">// it is &quot;lhs - gep *C, 0(ptr), 1(struct field), 0(ptr), 11(arrIdx)&quot;</span></div>
711
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="comment">// 2) in this case arrIdx 11 is larger than its getOffsetVar.Type Array([i32*10])</span></div>
712
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; </div>
713
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="comment">// therefore, if last getOffsetVar.Type is not the Array, just check the overall offset and its</span></div>
714
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="comment">// gep source type size (together with totalOffset along the value flow).</span></div>
715
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="comment">// so if curgepOffset + totalOffset &gt;= gepSrc (overflow)</span></div>
716
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// else totalOffset += curgepOffset</span></div>
717
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
718
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// otherwise, if last getOffsetVar.Type is the Array, check the last idx and array. (just offset,</span></div>
719
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="comment">// not with totalOffset during check)</span></div>
720
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="comment">// so if getOffsetVarVal &gt; getOffsetVar.TypeSize (overflow)</span></div>
721
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="comment">// else safe and return.</span></div>
722
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> byteOffset;</div>
723
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (gep-&gt;isConstantOffset())</div>
724
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div>
725
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; byteOffset = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(gep-&gt;accumulateConstantByteOffset());</div>
726
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div>
727
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">else</span></div>
728
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div>
729
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; byteOffset = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a335922caf105ee72cd9d66a451ae3d4e">getByteOffset</a>(gep);</div>
730
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div>
731
+ <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// for variable offset, join with accumulate gep offset</span></div>
732
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; gep_offsets[gep-&gt;getICFGNode()] = byteOffset;</div>
733
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">if</span> (byteOffset.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &gt;= <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() &amp;&amp; <a class="code" href="classSVF_1_1Options.html#a6450b984f67d3cfa3f44892e8eea555e">Options::GepUnknownIdx</a>())</div>
734
+ <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div>
735
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
736
+ <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div>
737
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
738
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (gep-&gt;getOffsetVarAndGepTypePairVec().size() &gt; 0)</div>
739
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div>
740
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a> *gepVal = gep-&gt;getOffsetVarAndGepTypePairVec().back().first;</div>
741
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a> *gepType = gep-&gt;getOffsetVarAndGepTypePairVec().back().second;</div>
742
+ <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
743
+ <div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (gepType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">isArrayTy</a>())</div>
744
+ <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div>
745
+ <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a> *gepArrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(gepType);</div>
746
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> gepArrTotalByte(0);</div>
747
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a> *idxValue = gepVal-&gt;<a class="code" href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">getValue</a>();</div>
748
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arrElemSize = gepArrType-&gt;<a class="code" href="classSVF_1_1SVFArrayType.html#a28da1169748e38b891133b76568a2759">getTypeOfElement</a>()-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
749
+ <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFConstantInt.html">SVFConstantInt</a> *op = SVFUtil::dyn_cast&lt;SVFConstantInt&gt;(idxValue))</div>
750
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div>
751
+ <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lb = (double) <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() / arrElemSize &gt;= op-&gt;getSExtValue() ?</div>
752
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; op-&gt;getSExtValue() * arrElemSize : <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
753
+ <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; gepArrTotalByte = gepArrTotalByte + <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(lb, lb);</div>
754
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div>
755
+ <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">else</span></div>
756
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; {</div>
757
+ <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> idx = <a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(idxValue);</div>
758
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> idxVal = ae-&gt;<a class="code" href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">_svfir2ExeState</a>-&gt;<a class="code" href="classSVF_1_1SVFIR2ItvExeState.html#a56434326130c8127c823097ad764947b">getEs</a>()[idx];</div>
759
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">if</span> (idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">isBottom</a>())</div>
760
+ <div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; {</div>
761
+ <div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; gepArrTotalByte = gepArrTotalByte + <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(0, 0);</div>
762
+ <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div>
763
+ <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">else</span></div>
764
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div>
765
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> ub = (idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &lt; 0) ? 0 :</div>
766
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; (<span class="keywordtype">double</span>) <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() / arrElemSize &gt;=</div>
767
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() ?</div>
768
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; arrElemSize * idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() : <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
769
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> lb = (idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &lt; 0) ? 0 :</div>
770
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; ((<span class="keywordtype">double</span>) <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>() / arrElemSize &gt;=</div>
771
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>()) ?</div>
772
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; arrElemSize * idxVal.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() : <a class="code" href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">Options::MaxFieldLimit</a>();</div>
773
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; gepArrTotalByte = gepArrTotalByte + <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(lb, ub);</div>
774
+ <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</div>
775
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
776
+ <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; total_bytes = total_bytes + gepArrTotalByte;</div>
777
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">if</span> (total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &gt;= gepArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>())</div>
778
+ <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; {</div>
779
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> msg =</div>
780
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="stringliteral">&quot;Buffer overflow!! Accessing buffer range: &quot;</span> +</div>
781
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(total_bytes) +</div>
782
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="stringliteral">&quot;\nAllocated Gep buffer size: &quot;</span> +</div>
783
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; std::to_string(gepArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>()) + <span class="stringliteral">&quot;\n&quot;</span>;</div>
784
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; msg += <span class="stringliteral">&quot;Position: &quot;</span> + firstValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
785
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; msg += <span class="stringliteral">&quot; The following is the value flow. [[\n&quot;</span>;</div>
786
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = gep_offsets.begin(); it != gep_offsets.end(); ++it)</div>
787
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; {</div>
788
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; msg += it-&gt;first-&gt;toString() + <span class="stringliteral">&quot;, Offset: &quot;</span> + <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(it-&gt;second) +</div>
789
+ <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="stringliteral">&quot;\n&quot;</span>;</div>
790
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; }</div>
791
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; msg += <span class="stringliteral">&quot;]].\nAlloc Site: &quot;</span> + gep-&gt;toString() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
792
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
793
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVFUtil::errMsg</a>(msg), gepArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>(),</div>
794
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; gepArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>(),</div>
795
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(), total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(),</div>
796
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; firstValue);</div>
797
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, curNode);</div>
798
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
799
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; }</div>
800
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">else</span></div>
801
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; {</div>
802
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="comment">// for gep last index&#39;s type is arr, stop here.</span></div>
803
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
804
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div>
805
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
806
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">else</span></div>
807
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; {</div>
808
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; total_bytes = total_bytes + byteOffset;</div>
809
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
810
+ <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; </div>
811
+ <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; }</div>
812
+ <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">if</span> (!visited.count(gep-&gt;getRHSVar()-&gt;getValue()))</div>
813
+ <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; {</div>
814
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; visited.insert(gep-&gt;getRHSVar()-&gt;getValue());</div>
815
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; worklist.<a class="code" href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">push</a>(gep-&gt;getRHSVar()-&gt;getValue());</div>
816
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div>
817
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
818
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a> *addr = SVFUtil::dyn_cast&lt;AddrStmt&gt;(stmt))</div>
819
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; {</div>
820
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="comment">// addrStmt is source node.</span></div>
821
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = <a class="code" href="classSVF_1_1AEAPI.html#afe6d49fd36a96bda165654eb393be6f2">getAllocaInstByteSize</a>(addr);</div>
822
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">if</span> (total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &gt;= arr_type_size ||</div>
823
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &lt; 0)</div>
824
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div>
825
+ <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> msg =</div>
826
+ <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="stringliteral">&quot;Buffer overflow!! Accessing buffer range: &quot;</span> + <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(total_bytes) +</div>
827
+ <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="stringliteral">&quot;\nAllocated buffer size: &quot;</span> + std::to_string(arr_type_size) + <span class="stringliteral">&quot;\n&quot;</span>;</div>
828
+ <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; msg += <span class="stringliteral">&quot;Position: &quot;</span> + firstValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
829
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; msg += <span class="stringliteral">&quot; The following is the value flow. [[\n&quot;</span>;</div>
830
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = gep_offsets.begin(); it != gep_offsets.end(); ++it)</div>
831
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; {</div>
832
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; msg += it-&gt;first-&gt;toString() + <span class="stringliteral">&quot;, Offset: &quot;</span> + <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(it-&gt;second) + <span class="stringliteral">&quot;\n&quot;</span>;</div>
833
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div>
834
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; msg += <span class="stringliteral">&quot;]].\n Alloc Site: &quot;</span> + addr-&gt;toString() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
835
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac71522e8c55f84cfc6c13a0ddff18436">SVFUtil::wrnMsg</a>(msg), arr_type_size, arr_type_size,</div>
836
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(), total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(),</div>
837
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; firstValue);</div>
838
+ <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, curNode);</div>
839
+ <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
840
+ <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; }</div>
841
+ <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">else</span></div>
842
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; {</div>
843
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; </div>
844
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
845
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div>
846
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div>
847
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; }</div>
848
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; }</div>
849
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a> *gvalue = SVFUtil::dyn_cast&lt;SVF::SVFGlobalValue&gt;(value))</div>
850
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; {</div>
851
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> arr_type_size = 0;</div>
852
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a> *svftype = gvalue-&gt;getType();</div>
853
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFPointerType&gt;(svftype))</div>
854
+ <div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; {</div>
855
+ <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArrayType.html">SVFArrayType</a> *ptrArrType = SVFUtil::dyn_cast&lt;SVFArrayType&gt;(</div>
856
+ <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#a112519b672206ac552273666949eeb3b">getPointeeElement</a>(<a class="code" href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">_svfir</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a43514023a4f4d0c32f536f51443b0efc">getValueNode</a>(gvalue))))</div>
857
+ <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; arr_type_size = ptrArrType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
858
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">else</span></div>
859
+ <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
860
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; }</div>
861
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">else</span></div>
862
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; arr_type_size = svftype-&gt;<a class="code" href="classSVF_1_1SVFType.html#a95b8031f1e15d49c7d68628be1d05aae">getByteSize</a>();</div>
863
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; </div>
864
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">if</span> (total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &gt;= arr_type_size || total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &lt; 0)</div>
865
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; {</div>
866
+ <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> msg = <span class="stringliteral">&quot;Buffer overflow!! Accessing buffer range: &quot;</span> + <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(total_bytes) +</div>
867
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="stringliteral">&quot;\nAllocated buffer size: &quot;</span> + std::to_string(arr_type_size) + <span class="stringliteral">&quot;\n&quot;</span>;</div>
868
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; msg += <span class="stringliteral">&quot;Position: &quot;</span> + firstValue-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
869
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; msg += <span class="stringliteral">&quot; The following is the value flow.\n[[&quot;</span>;</div>
870
+ <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = gep_offsets.begin(); it != gep_offsets.end(); ++it)</div>
871
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; {</div>
872
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; msg += it-&gt;first-&gt;toString() + <span class="stringliteral">&quot;, Offset: &quot;</span> + <a class="code" href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">IntervalToIntStr</a>(it-&gt;second) + <span class="stringliteral">&quot;\n&quot;</span>;</div>
873
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div>
874
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; msg += <span class="stringliteral">&quot;]]. \nAlloc Site: &quot;</span> + gvalue-&gt;toString() + <span class="stringliteral">&quot;\n&quot;</span>;</div>
875
+ <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
876
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <a class="code" href="structSVF_1_1BufOverflowException.html">BufOverflowException</a> bug(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac71522e8c55f84cfc6c13a0ddff18436">SVFUtil::wrnMsg</a>(msg), arr_type_size, arr_type_size,</div>
877
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(), total_bytes.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>(), firstValue);</div>
878
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; ae-&gt;<a class="code" href="classSVF_1_1BufOverflowChecker.html#a7c11b81809cb087317cbea654a589f75">addBugToRecoder</a>(bug, curNode);</div>
879
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
880
+ <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
881
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">else</span></div>
882
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div>
883
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
884
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div>
885
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
886
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a> *arg = SVFUtil::dyn_cast&lt;SVF::SVFArgument&gt;(value))</div>
887
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; {</div>
888
+ <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="classSVF_1_1AEAPI.html#ac49859a7848fbef0e29492e95b031f1f">AccessMemoryViaCallArgs</a>(arg, worklist, visited);</div>
889
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; }</div>
890
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">else</span></div>
891
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; {</div>
892
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="comment">// maybe SVFConstant</span></div>
893
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">// it may be cannot find the source, maybe we start from non-main function,</span></div>
894
+ <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="comment">// therefore it loses the value flow track</span></div>
895
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
896
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; }</div>
897
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div>
898
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="comment">// it may be cannot find the source, maybe we start from non-main function,</span></div>
899
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="comment">// therefore it loses the value flow track</span></div>
900
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
901
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160;}</div>
902
+ <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
903
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;}</div>
904
+ </div><!-- fragment --></div><!-- contents -->
905
+ <div class="ttc" id="aclassSVF_1_1SVFBugReport_html_a05f395eff23619ed10c31c0acda949e2"><div class="ttname"><a href="classSVF_1_1SVFBugReport.html#a05f395eff23619ed10c31c0acda949e2">SVF::SVFBugReport::addAbsExecBug</a></div><div class="ttdeci">void addAbsExecBug(GenericBug::BugType bugType, const GenericBug::EventStack &amp;eventStack, s64_t allocLowerBound, s64_t allocUpperBound, s64_t accessLowerBound, s64_t accessUpperBound)</div><div class="ttdef"><b>Definition:</b> <a href="SVFBugReport_8h_source.html#l00367">SVFBugReport.h:367</a></div></div>
906
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_afe6d49fd36a96bda165654eb393be6f2"><div class="ttname"><a href="classSVF_1_1AEAPI.html#afe6d49fd36a96bda165654eb393be6f2">SVF::AEAPI::getAllocaInstByteSize</a></div><div class="ttdeci">u32_t getAllocaInstByteSize(const AddrStmt *addr)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01362">AE.cpp:1362</a></div></div>
907
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html_a2401b022638769f59f86ab424a189b6e"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2401b022638769f59f86ab424a189b6e">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string &amp; getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00243">SVFValue.h:243</a></div></div>
908
+ <div class="ttc" id="aclassSVF_1_1CopyStmt_html"><div class="ttname"><a href="classSVF_1_1CopyStmt.html">SVF::CopyStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00364">SVFStatements.h:364</a></div></div>
909
+ <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>
910
+ <div class="ttc" id="aclassSVF_1_1AE_html_a73f74f2e9ecfd6870e98edee1ab6889c"><div class="ttname"><a href="classSVF_1_1AE.html#a73f74f2e9ecfd6870e98edee1ab6889c">SVF::AE::_recoder</a></div><div class="ttdeci">SVFBugReport _recoder</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00247">AE.h:247</a></div></div>
911
+ <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>
912
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_a62a7eb3560c8ec158c2fe0c1fc95189d"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#a62a7eb3560c8ec158c2fe0c1fc95189d">SVF::BufOverflowCheckerAPI::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#l00595">BufOverflowChecker.cpp:595</a></div></div>
913
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a7655b13bbfe720ca2b8a25e0a72528e6"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7655b13bbfe720ca2b8a25e0a72528e6">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(const std::string &amp;msg)</div><div class="ttdoc">Print error message by converting a string into red string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00076">SVFUtil.cpp:76</a></div></div>
914
+ <div class="ttc" id="aclassSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00313">SVFStatements.h:313</a></div></div>
915
+ <div class="ttc" id="aBufOverflowChecker_8h_html"><div class="ttname"><a href="BufOverflowChecker_8h.html">BufOverflowChecker.h</a></div></div>
916
+ <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#l00138">IRGraph.h:138</a></div></div>
917
+ <div class="ttc" id="anamespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00092">GeneralType.h:92</a></div></div>
918
+ <div class="ttc" id="aclassSVF_1_1CallICFGNode_html_a90fd0b8e44fba1a7eb76d15bce085d66"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const SVFInstruction * getCallSite() const</div><div class="ttdoc">Return callsite.</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00409">ICFGNode.h:409</a></div></div>
919
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a0df07a2659cbf3a918de5b0d7c407264"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">SVF::IntervalValue::lb</a></div><div class="ttdeci">const NumericLiteral &amp; lb() const</div><div class="ttdoc">Return the lower bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00218">IntervalValue.h:218</a></div></div>
920
+ <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00066">BasicTypes.h:66</a></div></div>
921
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ad364ccca2d91efa83263fad7ed196361"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ad364ccca2d91efa83263fad7ed196361">SVF::AEAPI::_checkpoints</a></div><div class="ttdeci">Set&lt; const CallICFGNode * &gt; _checkpoints</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00431">AE.h:431</a></div></div>
922
+ <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>
923
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04ab8167323edeff68403cf4ceb7e8133d9"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04ab8167323edeff68403cf4ceb7e8133d9">SVF::AEAPI::STRCAT</a></div><div class="ttdeci">@ STRCAT</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
924
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html_a4eb54eb3943f96e60f89d2fdd99f08c0"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html#a4eb54eb3943f96e60f89d2fdd99f08c0">SVF::BufOverflowException::what</a></div><div class="ttdeci">const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00088">BufOverflowChecker.h:88</a></div></div>
925
+ <div class="ttc" id="aclassSVF_1_1ICFGNode_html_a6c68f52dd90728073fb79141df9b0661"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a6c68f52dd90728073fb79141df9b0661">SVF::ICFGNode::getSVFStmts</a></div><div class="ttdeci">const SVFStmtList &amp; getSVFStmts() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00127">ICFGNode.h:127</a></div></div>
926
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html">SVF::BufOverflowException</a></div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00033">BufOverflowChecker.h:33</a></div></div>
927
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ae983d887ccf66c7f21b4712b37ab5f60"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ae983d887ccf66c7f21b4712b37ab5f60">SVF::AEAPI::_svfir</a></div><div class="ttdeci">SVFIR * _svfir</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00426">AE.h:426</a></div></div>
928
+ <div class="ttc" id="aclassSVF_1_1AE_html_a4ed21da186c37ab4e6a24ea26db2b5f2"><div class="ttname"><a href="classSVF_1_1AE.html#a4ed21da186c37ab4e6a24ea26db2b5f2">SVF::AE::_nodeToBugInfo</a></div><div class="ttdeci">Map&lt; const ICFGNode *, std::string &gt; _nodeToBugInfo</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00249">AE.h:249</a></div></div>
929
+ <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_ac71522e8c55f84cfc6c13a0ddff18436"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ac71522e8c55f84cfc6c13a0ddff18436">SVF::SVFUtil::wrnMsg</a></div><div class="ttdeci">std::string wrnMsg(const std::string &amp;msg)</div><div class="ttdoc">Returns warning message by converting a string into yellow string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00061">SVFUtil.cpp:61</a></div></div>
930
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html_a11f2d9b6e969ede6fca2c204cc15b821"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">SVF::SVFValue::getType</a></div><div class="ttdeci">virtual const SVFType * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00256">SVFValue.h:256</a></div></div>
931
+ <div class="ttc" id="aclassSVF_1_1SVFVar_html_ac2db6304ea5526fb446ae882983beeb0"><div class="ttname"><a href="classSVF_1_1SVFVar.html#ac2db6304ea5526fb446ae882983beeb0">SVF::SVFVar::getValue</a></div><div class="ttdeci">const SVFValue * getValue() const</div><div class="ttdoc">Get/has methods of the components.</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
932
+ <div class="ttc" id="aclassSVF_1_1GenericBug_html_acc65b033bfd61257d5b6fdbf932dfafe"><div class="ttname"><a href="classSVF_1_1GenericBug.html#acc65b033bfd61257d5b6fdbf932dfafe">SVF::GenericBug::EventStack</a></div><div class="ttdeci">std::vector&lt; SVFBugEvent &gt; EventStack</div><div class="ttdef"><b>Definition:</b> <a href="SVFBugReport_8h_source.html#l00083">SVFBugReport.h:83</a></div></div>
933
+ <div class="ttc" id="aclassSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
934
+ <div class="ttc" id="aclassSVF_1_1SVFType_html_a330084f9a3deb6e5acb52a8ee3eb7fe4"><div class="ttname"><a href="classSVF_1_1SVFType.html#a330084f9a3deb6e5acb52a8ee3eb7fe4">SVF::SVFType::isArrayTy</a></div><div class="ttdeci">bool isArrayTy() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00254">SVFType.h:254</a></div></div>
935
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a5d73cc2aa0a6ed49e8301fa7b0cd5045"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a5d73cc2aa0a6ed49e8301fa7b0cd5045">SVF::IntervalValue::toString</a></div><div class="ttdeci">const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00441">IntervalValue.h:441</a></div></div>
936
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_af8be90fc1b61103187908dce4ba68001"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">SVF::IntervalValue::isBottom</a></div><div class="ttdeci">bool isBottom() const override</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00060">IntervalValue.h:60</a></div></div>
937
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ac49859a7848fbef0e29492e95b031f1f"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ac49859a7848fbef0e29492e95b031f1f">SVF::AEAPI::AccessMemoryViaCallArgs</a></div><div class="ttdeci">void AccessMemoryViaCallArgs(const SVF::SVFArgument *arg, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01799">AE.cpp:1799</a></div></div>
938
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a6cd87d552b2bd81252ef62c624a56b36"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a6cd87d552b2bd81252ef62c624a56b36">SVF::AEAPI::_ae</a></div><div class="ttdeci">AE * _ae</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00424">AE.h:424</a></div></div>
939
+ <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#l00104">SVFIR2ItvExeState.h:104</a></div></div>
940
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a3dba35c84607bd3ed4e62a90ae2799cf"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a3dba35c84607bd3ed4e62a90ae2799cf">SVF::IntervalValue::is_infinite</a></div><div class="ttdeci">static bool is_infinite(const NumericLiteral &amp;e)</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00077">IntervalValue.h:77</a></div></div>
941
+ <div class="ttc" id="aclassSVF_1_1Options_html_a6450b984f67d3cfa3f44892e8eea555e"><div class="ttname"><a href="classSVF_1_1Options.html#a6450b984f67d3cfa3f44892e8eea555e">SVF::Options::GepUnknownIdx</a></div><div class="ttdeci">static const Option&lt; bool &gt; GepUnknownIdx</div><div class="ttdoc">if the access index of gepstmt is unknown, skip it, Default: false</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00273">Options.h:273</a></div></div>
942
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html_a95463e50b7e92f46cb095fd2a706257a"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html#a95463e50b7e92f46cb095fd2a706257a">SVF::BufOverflowException::getAccessUb</a></div><div class="ttdeci">u32_t getAccessUb() const</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00073">BufOverflowChecker.h:73</a></div></div>
943
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_adf5b059cb16c8f35146166269f9e1ebc"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#adf5b059cb16c8f35146166269f9e1ebc">SVF::BufOverflowCheckerAPI::_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#l00167">BufOverflowChecker.h:167</a></div></div>
944
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_afa34cb2ee3fc1ca5aa04a2afe7c2d6e8"><div class="ttname"><a href="classSVF_1_1AEAPI.html#afa34cb2ee3fc1ca5aa04a2afe7c2d6e8">SVF::AEAPI::AccessMemoryViaLoadStmt</a></div><div class="ttdeci">void AccessMemoryViaLoadStmt(const LoadStmt *load, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01779">AE.cpp:1779</a></div></div>
945
+ <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
946
+ <div class="ttc" id="aclassSVF_1_1GenericBug_html_a7aeeb33097bca5f7fe6747f90f5cecacac88ddac03bb8ae09a72058e4ad7af747"><div class="ttname"><a href="classSVF_1_1GenericBug.html#a7aeeb33097bca5f7fe6747f90f5cecacac88ddac03bb8ae09a72058e4ad7af747">SVF::GenericBug::FULLBUFOVERFLOW</a></div><div class="ttdeci">@ FULLBUFOVERFLOW</div><div class="ttdef"><b>Definition:</b> <a href="SVFBugReport_8h_source.html#l00086">SVFBugReport.h:86</a></div></div>
947
+ <div class="ttc" id="aclassSVF_1_1SVFFunction_html_a067bd6dbaf74a028d546fa56b095791b"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">SVF::SVFFunction::getAnnotations</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; &amp; getAnnotations() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00466">SVFValue.h:466</a></div></div>
948
+ <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>
949
+ <div class="ttc" id="aSVFType_8h_html"><div class="ttname"><a href="SVFType_8h.html">SVFType.h</a></div></div>
950
+ <div class="ttc" id="aclassSVF_1_1NumericLiteral_html_a4181e5e15e10304ea524e5f8b2a3f576"><div class="ttname"><a href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">SVF::NumericLiteral::getNumeral</a></div><div class="ttdeci">s64_t getNumeral() const</div><div class="ttdoc">Return Numeral.</div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8h_source.html#l00118">NumericLiteral.h:118</a></div></div>
951
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04a9a492bae5e1779267055b83cf033da28"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a9a492bae5e1779267055b83cf033da28">SVF::AEAPI::MEMCPY</a></div><div class="ttdeci">@ MEMCPY</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
952
+ <div class="ttc" id="aclassSVF_1_1StoreStmt_html"><div class="ttname"><a href="classSVF_1_1StoreStmt.html">SVF::StoreStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00400">SVFStatements.h:400</a></div></div>
953
+ <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#l00163">SVFIR2ItvExeState.h:163</a></div></div>
954
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html_a9c169e68b0c793909d643e3e266434fe"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html#a9c169e68b0c793909d643e3e266434fe">SVF::BufOverflowException::getAccessLb</a></div><div class="ttdeci">u32_t getAccessLb() const</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00063">BufOverflowChecker.h:63</a></div></div>
955
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html"><div class="ttname"><a href="classSVF_1_1SVFValue.html">SVF::SVFValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00177">SVFValue.h:177</a></div></div>
956
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ae0519df0b6927a2d077c3d46beeaa9f7"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ae0519df0b6927a2d077c3d46beeaa9f7">SVF::AEAPI::getStrlen</a></div><div class="ttdeci">IntervalValue getStrlen(const SVF::SVFValue *strValue)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01526">AE.cpp:1526</a></div></div>
957
+ <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>
958
+ <div class="ttc" id="aclassSVF_1_1AssignStmt_html_a973a2b79da223275ed6a1831837b89c7"><div class="ttname"><a href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">SVF::AssignStmt::getLHSVar</a></div><div class="ttdeci">SVFVar * getLHSVar() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00294">SVFStatements.h:294</a></div></div>
959
+ <div class="ttc" id="aclassSVF_1_1SVFArrayType_html"><div class="ttname"><a href="classSVF_1_1SVFArrayType.html">SVF::SVFArrayType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00377">SVFType.h:377</a></div></div>
960
+ <div class="ttc" id="anamespaceSVF_html_a5d28d0818391747924478e86b9033431"><div class="ttname"><a href="namespaceSVF.html#a5d28d0818391747924478e86b9033431">SVF::IntervalToIntStr</a></div><div class="ttdeci">std::string IntervalToIntStr(const IntervalValue &amp;inv)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00036">BufOverflowChecker.cpp:36</a></div></div>
961
+ <div class="ttc" id="aclassSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00385">ICFGNode.h:385</a></div></div>
962
+ <div class="ttc" id="aclassSVF_1_1SVFType_html"><div class="ttname"><a href="classSVF_1_1SVFType.html">SVF::SVFType</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00156">SVFType.h:156</a></div></div>
963
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_a49a9ee0125f2af00cc55c3224611f28e"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#a49a9ee0125f2af00cc55c3224611f28e">SVF::BufOverflowCheckerAPI::initExtFunMap</a></div><div class="ttdeci">virtual void initExtFunMap()</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00133">BufOverflowChecker.cpp:133</a></div></div>
964
+ <div class="ttc" id="aclassSVF_1_1SVFIR2ItvExeState_html_a335922caf105ee72cd9d66a451ae3d4e"><div class="ttname"><a href="classSVF_1_1SVFIR2ItvExeState.html#a335922caf105ee72cd9d66a451ae3d4e">SVF::SVFIR2ItvExeState::getByteOffset</a></div><div class="ttdeci">IntervalValue getByteOffset(const GepStmt *gep)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR2ItvExeState_8cpp_source.html#l00274">SVFIR2ItvExeState.cpp:274</a></div></div>
965
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04a68863d4626b3cde194a0fa6da74a3313"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a68863d4626b3cde194a0fa6da74a3313">SVF::AEAPI::MEMSET</a></div><div class="ttdeci">@ MEMSET</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
966
+ <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#l00088">ICFG.h:88</a></div></div>
967
+ <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
968
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a7be3da80bedb1077a99d67daa124afde"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a7be3da80bedb1077a99d67daa124afde">SVF::AEAPI::AccessMemoryViaRetNode</a></div><div class="ttdeci">void AccessMemoryViaRetNode(const CallICFGNode *callnode, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01745">AE.cpp:1745</a></div></div>
969
+ <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_afcf3fcda18e8d3e2bad70a51376c0ce1"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#afcf3fcda18e8d3e2bad70a51376c0ce1">SVF::FILOWorkList::push</a></div><div class="ttdeci">bool push(const Data &amp;data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00257">WorkList.h:257</a></div></div>
970
+ <div class="ttc" id="aclassSVF_1_1SVFConstantInt_html"><div class="ttname"><a href="classSVF_1_1SVFConstantInt.html">SVF::SVFConstantInt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00966">SVFValue.h:966</a></div></div>
971
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_adac2dc2c9f744a071ad3f0175ed40cd9"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">SVF::IntervalValue::ub</a></div><div class="ttdeci">const NumericLiteral &amp; ub() const</div><div class="ttdoc">Return the upper bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00225">IntervalValue.h:225</a></div></div>
972
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a52de7d619e8746a70718719306d7c5a1"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a52de7d619e8746a70718719306d7c5a1">SVF::BufOverflowChecker::detectBufOverflow</a></div><div class="ttdeci">bool detectBufOverflow(const ICFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00503">BufOverflowChecker.cpp:503</a></div></div>
973
+ <div class="ttc" id="aclassSVF_1_1SVFGlobalValue_html"><div class="ttname"><a href="classSVF_1_1SVFGlobalValue.html">SVF::SVFGlobalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00856">SVFValue.h:856</a></div></div>
974
+ <div class="ttc" id="aclassSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00051">SVFStatements.h:51</a></div></div>
975
+ <div class="ttc" id="aclassSVF_1_1IntervalExeState_html"><div class="ttname"><a href="classSVF_1_1IntervalExeState.html">SVF::IntervalExeState</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00407">IntervalExeState.h:407</a></div></div>
976
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html_a09144623a46e13e561db8b282440e6fc"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html#a09144623a46e13e561db8b282440e6fc">SVF::BufOverflowException::getAllocUb</a></div><div class="ttdeci">u32_t getAllocUb() const</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00053">BufOverflowChecker.h:53</a></div></div>
977
+ <div class="ttc" id="aclassSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00045">SVFVariables.h:45</a></div></div>
978
+ <div class="ttc" id="aclassSVF_1_1LoadStmt_html"><div class="ttname"><a href="classSVF_1_1LoadStmt.html">SVF::LoadStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00437">SVFStatements.h:437</a></div></div>
979
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04a2dc334d7904e139e2e2b5e9eb2a1bb0a"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04a2dc334d7904e139e2e2b5e9eb2a1bb0a">SVF::AEAPI::UNCLASSIFIED</a></div><div class="ttdeci">@ UNCLASSIFIED</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
980
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html"><div class="ttname"><a href="classSVF_1_1IntervalValue.html">SVF::IntervalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00043">IntervalValue.h:43</a></div></div>
981
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a13b4beca209f7d306cf0a6065987a489"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a13b4beca209f7d306cf0a6065987a489">SVF::BufOverflowChecker::handleICFGNode</a></div><div class="ttdeci">virtual void handleICFGNode(const SVF::ICFGNode *node) override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00496">BufOverflowChecker.cpp:496</a></div></div>
982
+ <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_adb26b186ee31bce7449a7b36faa24cc2"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#adb26b186ee31bce7449a7b36faa24cc2">SVF::IntervalESBase::store</a></div><div class="ttdeci">void store(u32_t addr, const IntervalValue &amp;val)</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00258">IntervalExeState.h:258</a></div></div>
983
+ <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>
984
+ <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">open 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>
985
+ <div class="ttc" id="aclassSVF_1_1AE_html_abea70264606aa7687d4b93e13155f96f"><div class="ttname"><a href="classSVF_1_1AE.html#abea70264606aa7687d4b93e13155f96f">SVF::AE::_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="AE_8h_source.html#l00239">AE.h:239</a></div></div>
986
+ <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>
987
+ <div class="ttc" id="aclassSVF_1_1GepStmt_html"><div class="ttname"><a href="classSVF_1_1GepStmt.html">SVF::GepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00474">SVFStatements.h:474</a></div></div>
988
+ <div class="ttc" id="astructSVF_1_1BufOverflowException_html_af8a7272c33f826f0079d5a31f6c5d547"><div class="ttname"><a href="structSVF_1_1BufOverflowException.html#af8a7272c33f826f0079d5a31f6c5d547">SVF::BufOverflowException::getAllocLb</a></div><div class="ttdeci">u32_t getAllocLb() const</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00043">BufOverflowChecker.h:43</a></div></div>
989
+ <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>
990
+ <div class="ttc" id="aclassSVF_1_1AE_html_af42ae42a73107e29133c481f94a9161f"><div class="ttname"><a href="classSVF_1_1AE.html#af42ae42a73107e29133c481f94a9161f">SVF::AE::_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="AE_8h_source.html#l00236">AE.h:236</a></div></div>
991
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html">SVF::BufOverflowChecker</a></div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8h_source.html#l00170">BufOverflowChecker.h:170</a></div></div>
992
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_af64d742317f2ddad87b87012225ddaaa"><div class="ttname"><a href="classSVF_1_1AEAPI.html#af64d742317f2ddad87b87012225ddaaa">SVF::AEAPI::handleExtAPI</a></div><div class="ttdeci">virtual void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01247">AE.cpp:1247</a></div></div>
993
+ <div class="ttc" id="aclassSVF_1_1BufOverflowChecker_html_a0b79c3694a08100d2d8d1b8109998131"><div class="ttname"><a href="classSVF_1_1BufOverflowChecker.html#a0b79c3694a08100d2d8d1b8109998131">SVF::BufOverflowChecker::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt) override</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00061">BufOverflowChecker.cpp:61</a></div></div>
994
+ <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>
995
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_a6a4afd9b4546d0a01dc869c6672f6dc6"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#a6a4afd9b4546d0a01dc869c6672f6dc6">SVF::BufOverflowCheckerAPI::handleExtAPI</a></div><div class="ttdeci">void handleExtAPI(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00419">BufOverflowChecker.cpp:419</a></div></div>
996
+ <div class="ttc" id="aclassSVF_1_1AE_html_ae421183ec34d08f02a484f3c025e10d7"><div class="ttname"><a href="classSVF_1_1AE.html#ae421183ec34d08f02a484f3c025e10d7">SVF::AE::_api</a></div><div class="ttdeci">AEAPI * _api</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00240">AE.h:240</a></div></div>
997
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_a950ff9c290eef3ed8b4343aaa527946e"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#a950ff9c290eef3ed8b4343aaa527946e">SVF::BufOverflowCheckerAPI::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>
998
+ <div class="ttc" id="aclassSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01113">SVFValue.h:1113</a></div></div>
999
+ <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#l00054">SVFIR2ItvExeState.h:54</a></div></div>
1000
+ <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a071a624c91def82a4bbbf3806c7b7eea"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a071a624c91def82a4bbbf3806c7b7eea">SVF::FILOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00238">WorkList.h:238</a></div></div>
1001
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00904">LLVMUtil.cpp:904</a></div></div>
1002
+ <div class="ttc" id="aclassSVF_1_1AddressValue_html"><div class="ttname"><a href="classSVF_1_1AddressValue.html">SVF::AddressValue</a></div><div class="ttdef"><b>Definition:</b> <a href="AddressValue_8h_source.html#l00043">AddressValue.h:43</a></div></div>
1003
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04aadccf4db29e170b4d669ef023866a28d"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04aadccf4db29e170b4d669ef023866a28d">SVF::AEAPI::STRCPY</a></div><div class="ttdeci">@ STRCPY</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
1004
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ab47136a3fee89fa6cad5ddb95306f27f"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ab47136a3fee89fa6cad5ddb95306f27f">SVF::AEAPI::_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="AE_8h_source.html#l00429">AE.h:429</a></div></div>
1005
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_ae88696790ca4f3392c7dc76c74619f46"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#ae88696790ca4f3392c7dc76c74619f46">SVF::BufOverflowCheckerAPI::detectStrcat</a></div><div class="ttdeci">bool detectStrcat(const CallICFGNode *call)</div><div class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00381">BufOverflowChecker.cpp:381</a></div></div>
1006
+ <div class="ttc" id="acJSON_8cpp_html_a7669ee67a0563250c1efaa24d130e1ac"><div class="ttname"><a href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a></div><div class="ttdeci">copy</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00414">cJSON.cpp:414</a></div></div>
1007
+ <div class="ttc" id="aclassSVF_1_1AE_html_aefab5dde7df823dc4038fe3f1918624d"><div class="ttname"><a href="classSVF_1_1AE.html#aefab5dde7df823dc4038fe3f1918624d">SVF::AE::handleICFGNode</a></div><div class="ttdeci">virtual void handleICFGNode(const ICFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l00746">AE.cpp:746</a></div></div>
1008
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_ace3e82bcfbb4495a765e01d75a58dc3f"><div class="ttname"><a href="classSVF_1_1AEAPI.html#ace3e82bcfbb4495a765e01d75a58dc3f">SVF::AEAPI::_checkpoint_names</a></div><div class="ttdeci">Set&lt; std::string &gt; _checkpoint_names</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00432">AE.h:432</a></div></div>
1009
+ <div class="ttc" id="aclassSVF_1_1BufOverflowCheckerAPI_html_a296a3ea0f8df72ce6480b5cb0f207945"><div class="ttname"><a href="classSVF_1_1BufOverflowCheckerAPI.html#a296a3ea0f8df72ce6480b5cb0f207945">SVF::BufOverflowCheckerAPI::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>
1010
+ <div class="ttc" id="aclassSVF_1_1AE_html_a1194ad55118ba76071d858d66c964241"><div class="ttname"><a href="classSVF_1_1AE.html#a1194ad55118ba76071d858d66c964241">SVF::AE::_bugLoc</a></div><div class="ttdeci">Set&lt; std::string &gt; _bugLoc</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00246">AE.h:246</a></div></div>
1011
+ <div class="ttc" id="aclassSVF_1_1IntervalExeState_html_ad485a35730353c0e945bc84a034d9e45"><div class="ttname"><a href="classSVF_1_1IntervalExeState.html#ad485a35730353c0e945bc84a034d9e45">SVF::IntervalExeState::inVarToAddrsTable</a></div><div class="ttdeci">bool inVarToAddrsTable(u32_t id) const override</div><div class="ttdoc">whether the variable is in varToAddrs table</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00474">IntervalExeState.h:474</a></div></div>
1012
+ <div class="ttc" id="aclassSVF_1_1FILOWorkList_html_a3fd9acb6d09fd142bfd402fdf8cac93b"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html#a3fd9acb6d09fd142bfd402fdf8cac93b">SVF::FILOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00272">WorkList.h:272</a></div></div>
1013
+ <div class="ttc" id="aclassSVF_1_1FILOWorkList_html"><div class="ttname"><a href="classSVF_1_1FILOWorkList.html">SVF::FILOWorkList</a></div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00229">WorkList.h:229</a></div></div>
1014
+ <div class="ttc" id="aclassSVF_1_1Options_html_aaab923c093730b1670a54f09340b1bd5"><div class="ttname"><a href="classSVF_1_1Options.html#aaab923c093730b1670a54f09340b1bd5">SVF::Options::MaxFieldLimit</a></div><div class="ttdeci">static const Option&lt; u32_t &gt; MaxFieldLimit</div><div class="ttdoc">Maximum number of field derivations for an object.</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00038">Options.h:38</a></div></div>
1015
+ <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>
1016
+ <div class="ttc" id="aclassSVF_1_1SVFType_html_a870b63af2bf9fe43cdf1df3d56b20f6c"><div class="ttname"><a href="classSVF_1_1SVFType.html#a870b63af2bf9fe43cdf1df3d56b20f6c">SVF::SVFType::isPointerTy</a></div><div class="ttdeci">bool isPointerTy() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00249">SVFType.h:249</a></div></div>
1017
+ <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>
1018
+ <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00897">SVFValue.h:897</a></div></div>
1019
+ <div class="ttc" id="aclassSVF_1_1SVFBugEvent_html"><div class="ttname"><a href="classSVF_1_1SVFBugEvent.html">SVF::SVFBugEvent</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBugReport_8h_source.html#l00051">SVFBugReport.h:51</a></div></div>
1020
+ <div class="ttc" id="aclassSVF_1_1AE_html_a0fdd00ba2e2c826043bb481e67fae397"><div class="ttname"><a href="classSVF_1_1AE.html#a0fdd00ba2e2c826043bb481e67fae397">SVF::AE::handleSVFStatement</a></div><div class="ttdeci">virtual void handleSVFStatement(const SVFStmt *stmt)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l00899">AE.cpp:899</a></div></div>
1021
+ <div class="ttc" id="aclassSVF_1_1SVFArrayType_html_a28da1169748e38b891133b76568a2759"><div class="ttname"><a href="classSVF_1_1SVFArrayType.html#a28da1169748e38b891133b76568a2759">SVF::SVFArrayType::getTypeOfElement</a></div><div class="ttdeci">const SVFType * getTypeOfElement() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00399">SVFType.h:399</a></div></div>
1022
+ <div class="ttc" id="aclassSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00631">SVFValue.h:631</a></div></div>
1023
+ <div class="ttc" id="aclassSVF_1_1AE_html_a89e523198459de07937a9961f57db2d1"><div class="ttname"><a href="classSVF_1_1AE.html#a89e523198459de07937a9961f57db2d1">SVF::AE::_callSiteStack</a></div><div class="ttdeci">std::vector&lt; const CallICFGNode * &gt; _callSiteStack</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00248">AE.h:248</a></div></div>
1024
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a29ab312d273e6c9c32a40d61861afb04"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a29ab312d273e6c9c32a40d61861afb04">SVF::AEAPI::ExtAPIType</a></div><div class="ttdeci">ExtAPIType</div><div class="ttdef"><b>Definition:</b> <a href="AE_8h_source.html#l00286">AE.h:286</a></div></div>
1025
+ <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00097">GeneralType.h:97</a></div></div>
1026
+ <div class="ttc" id="aclassSVF_1_1CallSite_html_a9e7c94ee7f689466111487e03b2cebcc"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9e7c94ee7f689466111487e03b2cebcc">SVF::CallSite::getArgument</a></div><div class="ttdeci">const SVFValue * getArgument(u32_t ArgNo) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l01132">SVFValue.h:1132</a></div></div>
1027
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a112519b672206ac552273666949eeb3b"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a112519b672206ac552273666949eeb3b">SVF::AEAPI::getPointeeElement</a></div><div class="ttdeci">const SVFType * getPointeeElement(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01673">AE.cpp:1673</a></div></div>
1028
+ <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>
1029
+ <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>
1030
+ <div class="ttc" id="aclassSVF_1_1AEAPI_html_a3665513f6e8f8b93ef3f9d273d03ee70"><div class="ttname"><a href="classSVF_1_1AEAPI.html#a3665513f6e8f8b93ef3f9d273d03ee70">SVF::AEAPI::AccessMemoryViaCopyStmt</a></div><div class="ttdeci">void AccessMemoryViaCopyStmt(const CopyStmt *copy, SVF::FILOWorkList&lt; const SVFValue * &gt; &amp;worklist, Set&lt; const SVFValue * &gt; &amp;visited)</div><div class="ttdef"><b>Definition:</b> <a href="AE_8cpp_source.html#l01770">AE.cpp:1770</a></div></div>
1031
+ <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#l00120">SVFIR2ItvExeState.h:120</a></div></div>
1032
+ <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 class="ttdef"><b>Definition:</b> <a href="BufOverflowChecker_8cpp_source.html#l00560">BufOverflowChecker.cpp:560</a></div></div>
1033
+ <!-- start footer part -->
1034
+ <hr class="footer"/><address class="footer"><small>
1035
+ Generated by &#160;<a href="http://www.doxygen.org/index.html">
1036
+ <img class="footer" src="doxygen.png" alt="doxygen"/>
1037
+ </a> 1.8.17
1038
+ </small></address>
1039
+ </body>
1040
+ </html>