首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用afl fuzzer时出现分割故障

使用afl fuzzer时出现分割故障
EN

Stack Overflow用户
提问于 2020-01-09 07:32:18
回答 1查看 333关注 0票数 1

我在找出下面代码的问题时遇到了问题。我运行完整的代码,我做了很多输入测试,错误正在按照我想要的方式进行处理。我还使用valgrind、cppchecker等工具来检查错误,并修复了这些错误。然后,我决定使用afl-fuzzer对我的代码进行高级错误检测,然后由于以下代码行,我得到了很多崩溃。然而,大多数崩溃都是由于分段故障造成的。但我似乎看不出代码有什么问题。任何帮助都将不胜感激。下面是不断给出错误的函数。我认为这与sscanf有关

代码语言:javascript
复制
Tree* insert(char* command, Tree* tree) {
    int age;
    char* name = malloc(sizeof(char) * 20);

    if (2 != sscanf(command, "i %d %20s", &age, name)){
        fprintf(stderr, "Failed to parse insert command: not enough parameters filled\n");
       // return NULL;
    }

    if (tree == NULL){
        tree = tree_create();
    }

    tree_insert(tree, age, name);

    return tree;
}

tree_create函数

代码语言:javascript
复制
Tree* tree_create(){
Tree *tree = malloc(sizeof(Tree));
tree->root = NULL;

return tree;
}

tree_insert

代码语言:javascript
复制
void tree_insert(Tree* tree, int age, char* name) {
if (tree->root == NULL) {
    Node *node = calloc(1, sizeof(Node));
    node->name = name;
    node->age = age;
    node->isRoot = true;
    node->right = NULL;
    node->left = NULL;
    tree->root = node;

} else {
    node_insert(tree->root, age, name, 1);
}
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-09 07:40:33

主要的问题在以下几行中:

代码语言:javascript
复制
char* name = malloc(sizeof(char) * 20);

if (2 != sscanf(command, "i %d %20s", &age, name)){

您的转换规范%20s指出,sscanf()可以在name中存储20个字符外加一个空字节,但是您只能为19个字符外加一个空字节分配足够的空间。scanf()函数家族和大多数其他函数之间的这种“一对一”会导致问题,fuzzers应该能找到它们。

解决方法很简单:要么将第一个20改为21,要么将第二个20改为19。哪个更好,由您来判断。我们没有足够的信息来选择哪一个是更好的选择。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59655253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档