0

尝试一些 libmagic 的测试代码:

 #include <magic.h>
 #include <stdio.h>

 int main(int argc, char **argv) {

    magic_t cookie;

    cookie = magic_open(MAGIC_MIME_TYPE);

    if (cookie == NULL) {
        perror(magic_error(cookie));
        return 1;
    }

    if (magic_load(cookie, NULL) == -1) {
        perror(magic_error(cookie));
        return 1;
    }

    const char *string = magic_file(cookie, *(argv+1));

    if (string == NULL) {
        perror(magic_error(cookie));
        return 1;
    }

    printf("%s\n", string);

    magic_close(cookie);
    return 0;
 }

代码几乎是从这里撕下来的:

http://vivitemage.co.uk/blog/?p=105

代码运行正常,但valgrind --leak-check=full ./libmagic /path/to/some/image/file报告了使用库中的 memleak:

 ==6153== HEAP SUMMARY:
 ==6153==     in use at exit: 48 bytes in 3 blocks
 ==6153==   total heap usage: 36 allocs, 33 frees, 990,559 bytes allocated
 ==6153== 
 ==6153== 48 bytes in 1 blocks are definitely lost in loss record 2 of 2
 ==6153==    at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
 ==6153==    by 0x4E43D3D: ??? (in /usr/lib/x86_64-linux-gnu/libmagic.so.1.0.0)
 ==6153==    by 0x4E447ED: ??? (in /usr/lib/x86_64-linux-gnu/libmagic.so.1.0.0)
 ==6153==    by 0x4008A8: main (libmagic.c:15)
 ==6153== 
 ==6153== LEAK SUMMARY:
 ==6153==    definitely lost: 48 bytes in 1 blocks
 ==6153==    indirectly lost: 0 bytes in 2 blocks
 ==6153==      possibly lost: 0 bytes in 0 blocks
 ==6153==    still reachable: 0 bytes in 0 blocks
 ==6153==         suppressed: 0 bytes in 0 blocks

magic_close()除了总结之外,我还需要其他东西吗,还是图书馆有一些弱点?

magic.h 说MAGIC_VERSION 524,我使用的是gcc 5.4.0

4

1 回答 1

1

我今天刚遇到同样的问题,似乎报告了一个缺陷:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=840754

根据那里的讨论,它应该在最新版本中修复。

于 2017-02-14T11:32:52.773 回答