【规则分享】C/C++字典空值检查规则 #1191
xiohuang9
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景介绍
在C/C++代码中,字典(也称为映射、哈希表或关联数组)是一种常见的数据结构。但是在处理字典时,需要确保正确处理空值(字典中某个键对应的值为空或者不存在的情况),避免代码缺陷。
正常来说,对于 std::map 进行下标索引操作,如果访问的是一个不存在的键(即空值),就会自动创建一个新的键值对,新键的值将使用其数据类型的默认构造函数进行初始化。原则上不是很推荐,但大多数情况下不会影响业务逻辑。但是对于 rapidjson 框架,如果访问空值的话,就会直接抛异常,造成程序崩溃。
规则推荐
使用TCA-Armory-C1进行自研:
规则:DictKeyCheck
代码示例:
rapidjson框架的map对象访问Key之前需要先使用hasMember方法检查Key值是否存在。
如示例所示,如果没有提前检查Key值,若Key值不存在的话,rapidjson框架就会断言失败或者抛异常,导致进程直接退出。
![dict-key-check](https://private-user-images.githubusercontent.com/160583399/378264904-2e940bd8-f4bb-4470-8f6e-04a09644172e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDE1NjAsIm5iZiI6MTczOTMwMTI2MCwicGF0aCI6Ii8xNjA1ODMzOTkvMzc4MjY0OTA0LTJlOTQwYmQ4LWY0YmItNDQ3MC04ZjZlLTA0YTA5NjQ0MTcyZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTE0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zZTQ0M2Y2Njk0MjVmYjk5YTBiNmViY2Q5MzQ4MmIyNTllZDIyOGUzYTQ4NTY3ODkwYmJhY2Q4ZDc0NjQzMmVkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Ge1qeLmUzaIjHP5-u1NwKbN0T0SHHW-Wv6kKaa38ylU)
规则使用说明
进入页面,点击方案->规则配置 -> 自定义规则包-> 添加规则 ->搜索规则名DictKeyCheck->选择需要添加的规则 ->批量添加规则
![1、2](https://private-user-images.githubusercontent.com/160583399/378265145-e9f025c5-5180-4bfb-b787-40eb8541223d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDE1NjAsIm5iZiI6MTczOTMwMTI2MCwicGF0aCI6Ii8xNjA1ODMzOTkvMzc4MjY1MTQ1LWU5ZjAyNWM1LTUxODAtNGJmYi1iNzg3LTQwZWI4NTQxMjIzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTE0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNThiOWFjOGU2NmJkZDBiOTAxNDZhZTJkZGEwMjUyZDFkYzJhOWVlN2I4ZWQ0ZjM4MmFkMWU5OWM5YzYxZGVjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.0LP0SbuZXODsSDZddF16ZNnQ36BaoUsD5HbWYmdSVNQ)
![dictkeycheck](https://private-user-images.githubusercontent.com/160583399/378308583-265b4f7c-9ae5-4f4d-9f8a-09ae2c332724.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDE1NjAsIm5iZiI6MTczOTMwMTI2MCwicGF0aCI6Ii8xNjA1ODMzOTkvMzc4MzA4NTgzLTI2NWI0ZjdjLTlhZTUtNGY0ZC05ZjhhLTA5YWUyYzMzMjcyNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTE0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YWFlMDNiMzdkZWEzZjY1YzAyNjRlZGE1ZjAzOGIxYjBhZGY3YzRlZDllZjkwZTRjMzU5NzFjZTI3ZjAyOTg2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.cvMchO9V9aD30vnqnBePgL22m41wIiXG7gi2P6X1e8A)
联系我们
欢迎访问我们的平台:腾讯云代码分析
![640](https://private-user-images.githubusercontent.com/160583399/378314665-d2ff3fdd-9517-452d-b04d-8524ddc001cc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDE1NjAsIm5iZiI6MTczOTMwMTI2MCwicGF0aCI6Ii8xNjA1ODMzOTkvMzc4MzE0NjY1LWQyZmYzZmRkLTk1MTctNDUyZC1iMDRkLTg1MjRkZGMwMDFjYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTE0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMWMwNzAzZjU4YzMzYjg1MTQ2ZTdjYTY0MjcxMTBmNGU3YzQyY2NlOWU4YjhiODY4ZWEyOGRjMDU3MzMzNzEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.R3yTj3Sce38ceCqtLjaxKsnvtR8mLqPEyhNsvuWAaJU)
使用文档:腾讯云代码分析帮助文档
持续为您的代码助力!
扫描可进开源群畅聊技术&答疑解惑
Beta Was this translation helpful? Give feedback.
All reactions