首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何抑制gpgme的警告?

如何抑制gpgme的警告?
EN

Stack Overflow用户
提问于 2018-02-09 19:07:56
回答 1查看 281关注 0票数 1

我试图在我的代码中使用GPGME来验证一些签名。但是,简单地初始化和发布GPGME上下文会导致val研发出大量警告。

例如:

代码语言:javascript
复制
#include <gpgme.h>

int main() {
    gpgme_check_version(NULL);
    gpgme_ctx_t my_ctx;
    gpgme_error_t gpg_err;

    gpg_err = gpgme_new(&my_ctx);

    gpgme_release(my_ctx);

    return 0;
}

gcc -lgpgme -lassuan -lgpg-error main.c编译它,然后运行它。从valgrind -v ./a.out来看,这段代码似乎启动了6个不同的进程。我复制了相关的警告信息:

代码语言:javascript
复制
==19158== Warning: invalid file descriptor 1024 in syscall close()
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)
==19158== Warning: invalid file descriptor 1025 in syscall close()
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)
==19158== Warning: invalid file descriptor 1026 in syscall close()
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)
==19158== Warning: invalid file descriptor 1027 in syscall close()
==19158==    Use --log-fd=<number> to select an alternative log fd.
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)
==19158== Warning: invalid file descriptor 1028 in syscall close()
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)
==19158== Warning: invalid file descriptor 1029 in syscall close()
==19158==    at 0x558DBC4: close (in /usr/lib/libc-2.26.so)
==19158==    by 0x4E65DF8: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E66D65: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6736B: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56572: gpgme_get_engine_info (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E56C87: ??? (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x4E6838F: gpgme_new (in /usr/lib/libgpgme.so.11.19.0)
==19158==    by 0x10880B: main (in /home/thedoctor/Programming/gpgmetest/mytest)

对于6个不同的进程,总共重复完全相同的一组警告。似乎GPGME试图关闭一些不属于GPGME的文件描述符。

我的问题有两个:

  1. 我是不是用错了gpgme?还有什么需要我做的吗?
  2. 如果API的使用是正确的,我如何才能阻止这些警告来自valgrind?

我似乎无法为这些警告产生抑制作用。运行valgrind --gen-suppressions=all -v ./a.out不会在输出中显示任何抑制。我想这是因为这些都是警告而不是真正的错误。我试着自己写一篇压抑的文章,但我不知道该怎么写。通常,当我不得不写抑制词时,它们是为Memcheck:Leak编写的。但这些警告属于哪一类呢?

编辑:这是我试着写的一个抑制:

代码语言:javascript
复制
{
    gpgme-leak-fd
    fun:close
    ...
    fun:gpgme_new
}

编辑2:我试着悬赏,但它过期了。如果你对此有一个有效的答案,我会给你100英镑的奖金。

EN

回答 1

Stack Overflow用户

发布于 2018-02-21 19:28:36

下面是丹McGee编写的GPGME的一些规则,摘自这里

代码语言:javascript
复制
{
   gpgme-static-get-engine-info
   Memcheck:Leak
   fun:malloc
   ...
   fun:gpgme_get_engine_info
}
{
   gpgme-static-set-engine-info
   Memcheck:Leak
   fun:malloc
   ...
   fun:_gpgme_set_engine_info
   fun:gpgme_set_engine_info
}
{
   gpgme-static-set-locale
   Memcheck:Leak
   fun:malloc
   fun:strdup
   fun:gpgme_set_locale
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48712540

复制
相关文章

相似问题

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