Docker Alpine - GraphViz - gvpr导致分段错误(核心已转储)

4
我正在使用docker镜像node:12-alpine,并且使用apk add graphviz命令安装了Graphviz版本为graphviz-2.42.3-r0

但是当我尝试执行gvpr时,出现了Segmentation fault (core dumped)的错误,如您可以在https://gitlab.com/Lepardo/simplewebspider-nodejs/-/jobs/612093260中看到。

您有什么想法,我该如何解决这个问题?


天真地说,我猜你可能缺少一个库。但是哪一个呢?廉价刺激:dot -V; dot -v; gvpr -V - sroush
1个回答

1

这个段错误似乎是 gvpr 程序中的一个 bug。

这个 bug 在最新的来自 edge 软件源的 gvpr 版本 2.47.0-r2 中已经修复,可以通过以下方式进行安装:

 apk add graphviz --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

在graphviz 2.44.0(Alpine 3.13和3.12)上,这个bug似乎仍然存在。
graphviz gitlab存储库中,查看gvpr.c提交历史记录,这个提交从2020年8月13日引人注目。

修复:显式传递格式参数到gverrorf中

Matthew Fernandez于8个月前编写

gverrorf函数的原型与其存储的函数指针不一致。在具有更宽容的可变参数调用约定的平台上,一切都正常工作。但是,在其他平台上,通过此函数指针调用gverrorf将导致堆栈破坏。此更改将gverrorf与其所存储的函数指针类型对齐。

这种潜在的堆栈破坏很可能解释了Alpine上的segfault,该系统基于musl-libc,通常是一个更严格的libc实现。查看其他提交,这似乎是最可能的修复方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接