问题标签 [libmagic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
131 浏览

c++ - 46: '(dryad-bibo/v)[0-9].[0-9]' 的正则表达式错误 17,(匹配失败)

我正在尝试使用 libmagic 和以下代码来确定几种类型的文件的 mime 类型:

但是对于我尝试的任何文件或缓冲区,我都会收到正则表达式错误,或者是或类似于:

46: '(dryad-bibo/v)[0-9].[0-9]' 的正则表达式错误 17,(匹配失败)

例如这个 .svg 文件:

到目前为止我已经尝试过:

  • libmagic 5.35
  • libmagic 5.39
  • libmagic 5.40
  • 来自 opensource.apple 的 libmagic
  • 将 LC_TYPE 和 LANG 设置为“C”

我正在链接本地构建的 libmagic 版本,在构建时我会遗漏什么吗?是否有任何呼叫不正确或有什么我遗漏的?

尝试运行在本地编译的相关文件二进制文件时出现类似错误。而当我使用默认可用的文件命令时,我会得到 image/svg+xml 作为输出。

编辑

为了构建 libmagic(适用于 macOS 和 Ubuntu),我按照以下步骤操作:

  • 从Github下载相关版本
  • 自动重新配置——安装
  • 。/配置
  • 制作
  • 进行安装

更新

看起来这个文件底部的正则表达式导致了问题(至少对于 svg):

https://github.com/file/file/blob/b56b58d499dbe58f2bed28e6b3c297fe7add992e/magic/Magdir/dataone

更新 2

发生了一些奇怪的事情;在我让它工作的系统上,按预期magic_version()报告540 。但是在出现此错误而失败的系统上,magic_version()报告538

这对我来说毫无意义,因为我在系统本身的任何地方都找不到该版本,当我./file --version在构建库中运行时,它会报告file-5.40.

0 投票
0 回答
21 浏览

c++ - 使用lib magic时如何处理长前缀文件路径

我正在使用 lib magic、trID 和其他一些库编写程序,使用 C/C++ 语言。但是当我的输入文件长度超过 260 时,我遇到了一个问题,我需要添加前缀 \?\ 以便 Windows 可以处理它。但是当使用 lib magic 检测文件类型时,mime 结果会是 inode/blockdevice,magicResult 是 block special (204/204)。有没有办法处理这个问题?lib trID 可以接受前缀 \?\ 并返回正确的结果,但 lib magic 不能。