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