ruby-filemagic 0.6.3 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CONTRIBUTING.md +1 -0
- data/ChangeLog +23 -0
- data/Dockerfile +37 -0
- data/README +32 -5
- data/Rakefile +17 -0
- data/ext/filemagic/extconf.rb +17 -2
- data/ext/filemagic/filemagic.c +41 -16
- data/ext/filemagic/filemagic.h +8 -6
- data/lib/filemagic/magic.mgc +0 -0
- data/lib/filemagic/version.rb +1 -1
- data/lib/filemagic.rb +21 -6
- data/test/filemagic_test.rb +71 -3
- data/test/pylink +1 -0
- metadata +17 -13
- data/test/pylink +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 072a4b2682df79e50b62c7cf1c0b42db262bac212f90ec741fdf5b82b89a661f
|
4
|
+
data.tar.gz: ccce9e4086fd53a704ff20d5ed0fdeeec384f21e346ac0e228505f8802337b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42f6d02a666eefcfa9647cabe589ade5b7b2bae7e37cf9613b20cfe5190ab722543659028bf601b3b196a58c911596eed30cc9413544f3cdeaa5b335aa09c576
|
7
|
+
data.tar.gz: acf53f89c934e944917b80cfa62150da43b6b430bf4bce8798ad17b93dc54546a5092c42bdd0facf8eb35a0e12c56415a3b48409075e6262aadc93dcaae77be9
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Please note that this project is **no longer maintained**. I'm happy to hand over ownership to anyone who shows serious interest.
|
data/ChangeLog
CHANGED
@@ -2,6 +2,29 @@
|
|
2
2
|
|
3
3
|
= Revision history for ruby-filemagic
|
4
4
|
|
5
|
+
== 0.7.3 [2022-01-07]
|
6
|
+
|
7
|
+
* Dockerfile to build native extension (pull request #26 by Pavel Lobashov).
|
8
|
+
* Include paths for ARM-based Apple Macs (Apple Silicon) (pull request #35 by
|
9
|
+
@545ch4).
|
10
|
+
|
11
|
+
== 0.7.2 [2017-07-02]
|
12
|
+
|
13
|
+
* Fix segfault on <tt>buffer(nil)</tt> when compiled with GCC (pull request
|
14
|
+
#24 by Yuya Tanaka).
|
15
|
+
|
16
|
+
== 0.7.1 [2015-10-27]
|
17
|
+
|
18
|
+
* List default lib and header directories (pull request #18 by Adam Wróbel).
|
19
|
+
|
20
|
+
== 0.7.0 [2015-07-28]
|
21
|
+
|
22
|
+
* Changed FileMagic#io to optionally rewind input afterwards.
|
23
|
+
* New method FileMagic.library_version (+magic_version+).
|
24
|
+
* New method FileMagic#descriptor (+magic_descriptor+).
|
25
|
+
* New method FileMagic#fd.
|
26
|
+
* Added new constants from file 5.23.
|
27
|
+
|
5
28
|
== 0.6.3 [2015-02-06]
|
6
29
|
|
7
30
|
* Fixed build error with Clang (issue #13 by Stan Carver II).
|
data/Dockerfile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
FROM ruby:2.4
|
2
|
+
|
3
|
+
RUN apt-get update && apt-get install -y mingw-w64 && gem install rake-compiler
|
4
|
+
ENV HOST_ARCH i686-w64-mingw32
|
5
|
+
|
6
|
+
ENV GNURX_VERSION 2.5.1
|
7
|
+
ENV GNURX_SOURCE /mingw-libgnurx-$GNURX_VERSION
|
8
|
+
RUN curl https://vorboss.dl.sourceforge.net/project/mingw/Other/UserContributed/regex/mingw-regex-$GNURX_VERSION/mingw-libgnurx-$GNURX_VERSION-src.tar.gz | \
|
9
|
+
tar xzvf - && \
|
10
|
+
cd $GNURX_SOURCE && \
|
11
|
+
./configure --host=$HOST_ARCH --enable-static --disable-shared && \
|
12
|
+
make
|
13
|
+
|
14
|
+
ENV MAGIC_VERSION 5.31
|
15
|
+
ENV MAGIC_SOURCE /file-$MAGIC_VERSION
|
16
|
+
RUN curl ftp://ftp.astron.com/pub/file/file-$MAGIC_VERSION.tar.gz | \
|
17
|
+
tar xzvf - && \
|
18
|
+
cd $MAGIC_SOURCE && \
|
19
|
+
./configure --disable-silent-rules --enable-fsect-man5 && \
|
20
|
+
make && \
|
21
|
+
make clean && \
|
22
|
+
LDFLAGS=-L$GNURX_SOURCE CFLAGS=-I$GNURX_SOURCE ./configure --disable-silent-rules --enable-fsect-man5 --host=$HOST_ARCH && \
|
23
|
+
make || true
|
24
|
+
|
25
|
+
ENV CROSS_RUBIES 2.3.4 2.4.1
|
26
|
+
RUN for i in $CROSS_RUBIES; do rake-compiler cross-ruby VERSION=$i; done
|
27
|
+
|
28
|
+
ENV APP_SOURCE /ruby-filemagic
|
29
|
+
RUN mkdir $APP_SOURCE
|
30
|
+
WORKDIR $APP_SOURCE
|
31
|
+
|
32
|
+
RUN echo "source 'https://rubygems.org'\ngemspec\n" > Gemfile
|
33
|
+
COPY *.gemspec .
|
34
|
+
RUN bundle install
|
35
|
+
|
36
|
+
COPY . .
|
37
|
+
ENTRYPOINT rake gem:native WITH_CROSS_GNURX=$GNURX_SOURCE WITH_CROSS_MAGIC=$MAGIC_SOURCE
|
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to filemagic version 0.
|
5
|
+
This documentation refers to filemagic version 0.7.3
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
@@ -29,32 +29,46 @@ FileMagic extension module. See also libmagic(3), file(1) and magic(4).
|
|
29
29
|
<tt>check(filename)</tt>:: Checks the validity of entries in the database
|
30
30
|
file passed in as filename
|
31
31
|
<tt>compile(filename)</tt>:: Compiles the database file passed in as filename
|
32
|
+
<tt>load(filename)</tt>:: Loads the database file passed in as filename
|
32
33
|
<tt>close()</tt>:: Closes the magic database and frees any memory
|
33
34
|
allocated
|
34
35
|
|
35
|
-
===
|
36
|
+
=== Synopsis
|
36
37
|
|
37
38
|
require 'filemagic'
|
38
39
|
|
39
40
|
p FileMagic::VERSION
|
41
|
+
# => "0.7.3"
|
40
42
|
p FileMagic::MAGIC_VERSION
|
43
|
+
# => "5.39"
|
41
44
|
|
42
45
|
p FileMagic.new.flags
|
46
|
+
# => []
|
43
47
|
|
44
48
|
FileMagic.open(:mime) { |fm|
|
45
49
|
p fm.flags
|
50
|
+
# => [:mime_type, :mime_encoding]
|
46
51
|
p fm.file(__FILE__)
|
52
|
+
# => "text/plain; charset=us-ascii"
|
47
53
|
p fm.file(__FILE__, true)
|
54
|
+
# => "text/plain"
|
48
55
|
|
49
56
|
fm.flags = [:raw, :continue]
|
50
57
|
p fm.flags
|
58
|
+
# => [:continue, :raw]
|
51
59
|
}
|
52
60
|
|
53
61
|
fm = FileMagic.new
|
54
62
|
p fm.flags
|
63
|
+
# => []
|
55
64
|
|
56
65
|
mime = FileMagic.mime
|
57
66
|
p mime.flags
|
67
|
+
# => [:mime_type, :mime_encoding]
|
68
|
+
|
69
|
+
=== Environment
|
70
|
+
|
71
|
+
The environment variable +MAGIC+ can be used to set the default magic file name.
|
58
72
|
|
59
73
|
=== Installation
|
60
74
|
|
@@ -62,13 +76,23 @@ Install the gem:
|
|
62
76
|
|
63
77
|
sudo gem install ruby-filemagic
|
64
78
|
|
65
|
-
The file(1) library and headers are required
|
79
|
+
The file(1) library and headers are required:
|
80
|
+
|
81
|
+
Debian/Ubuntu:: +libmagic-dev+
|
82
|
+
Fedora/SuSE:: +file-devel+
|
83
|
+
Gentoo:: +sys-libs/libmagic+
|
84
|
+
OS X:: <tt>brew install libmagic</tt>
|
66
85
|
|
86
|
+
=== Build native extension
|
87
|
+
|
88
|
+
rake docker:gem:native
|
89
|
+
|
90
|
+
Requires Docker[https://docker.com] to be installed.
|
67
91
|
|
68
92
|
== LINKS
|
69
93
|
|
70
|
-
Homepage::
|
71
|
-
Documentation:: https://blackwinter.github.
|
94
|
+
Homepage:: https://www.darwinsys.com/file/
|
95
|
+
Documentation:: https://blackwinter.github.io/ruby-filemagic
|
72
96
|
Source code:: https://github.com/blackwinter/ruby-filemagic
|
73
97
|
RubyGem:: https://rubygems.org/gems/ruby-filemagic
|
74
98
|
Travis CI:: https://travis-ci.org/blackwinter/ruby-filemagic
|
@@ -85,6 +109,9 @@ Travis CI:: https://travis-ci.org/blackwinter/ruby-filemagic
|
|
85
109
|
* Martin Carpenter <mailto:mcarpenter@free.fr> for Ruby 1.9.2 compatibility
|
86
110
|
and other improvements.
|
87
111
|
|
112
|
+
* Pavel Lobashov (@ShockwaveNN) for Dockerfile to build cross-compiled Windows
|
113
|
+
extension (pull request #26).
|
114
|
+
|
88
115
|
|
89
116
|
== COPYING
|
90
117
|
|
data/Rakefile
CHANGED
@@ -32,3 +32,20 @@ begin
|
|
32
32
|
rescue LoadError => err
|
33
33
|
warn "Please install the `hen' gem. (#{err})"
|
34
34
|
end
|
35
|
+
|
36
|
+
namespace :docker do
|
37
|
+
|
38
|
+
name = "ruby-filemagic-gem-native:#{FileMagic::VERSION}"
|
39
|
+
|
40
|
+
task :build do
|
41
|
+
sh *%W[docker build -t #{name} .]
|
42
|
+
end
|
43
|
+
|
44
|
+
task :run do
|
45
|
+
sh *%W[docker run -it --rm -v #{Dir.pwd}/pkg:/ruby-filemagic/pkg #{name}]
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "Build native gems using docker image #{name}"
|
49
|
+
task 'gem:native' => %w[build run]
|
50
|
+
|
51
|
+
end
|
data/ext/filemagic/extconf.rb
CHANGED
@@ -1,14 +1,29 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
|
3
|
+
HEADER_DIRS = [
|
4
|
+
'/opt/local/include', # MacPorts
|
5
|
+
'/usr/local/include', # compiled from source and Homebrew
|
6
|
+
'/opt/homebrew/include', # compiled from source and Homebrew (ARM based Macs)
|
7
|
+
'/usr/include', # system
|
8
|
+
]
|
9
|
+
|
10
|
+
LIB_DIRS = [
|
11
|
+
'/opt/local/lib', # MacPorts
|
12
|
+
'/usr/local/lib', # compiled from source and Homebrew
|
13
|
+
'/opt/homebrew/lib', # compiled from source and Homebrew (ARM based Macs)
|
14
|
+
'/usr/lib', # system
|
15
|
+
]
|
16
|
+
|
3
17
|
$CFLAGS << ' -Wall' if ENV['WALL']
|
4
18
|
$LDFLAGS << ' -static-libgcc' if RUBY_PLATFORM =~ /cygwin|mingw|mswin/
|
5
19
|
|
6
|
-
dir_config('magic')
|
7
|
-
dir_config('gnurx')
|
20
|
+
dir_config('magic', HEADER_DIRS, LIB_DIRS)
|
21
|
+
dir_config('gnurx', HEADER_DIRS, LIB_DIRS)
|
8
22
|
|
9
23
|
have_library('gnurx')
|
10
24
|
|
11
25
|
if have_library('magic', 'magic_open') && have_header('magic.h')
|
26
|
+
have_func('magic_version')
|
12
27
|
have_header('file/patchlevel.h')
|
13
28
|
create_makefile('filemagic/ruby_filemagic')
|
14
29
|
else
|
data/ext/filemagic/filemagic.c
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
#include "filemagic.h"
|
2
2
|
|
3
|
+
/* Returns the magic version */
|
4
|
+
static VALUE
|
5
|
+
rb_magic_version(VALUE klass) {
|
6
|
+
char version[8] = "0";
|
7
|
+
#ifdef HAVE_MAGIC_VERSION
|
8
|
+
RB_MAGIC_SET_VERSION(magic_version() / 100, magic_version() % 100)
|
9
|
+
#endif
|
10
|
+
return rb_str_new2(version);
|
11
|
+
}
|
12
|
+
|
3
13
|
/* Returns the magic path */
|
4
14
|
static VALUE
|
5
15
|
rb_magic_getpath(VALUE klass) {
|
@@ -102,6 +112,7 @@ rb_magic_init(int argc, VALUE *argv, VALUE self) {
|
|
102
112
|
|
103
113
|
rb_iv_set(self, "iflags", flags);
|
104
114
|
rb_iv_set(self, "closed", Qfalse);
|
115
|
+
rb_iv_set(self, "@simplified", Qfalse);
|
105
116
|
|
106
117
|
keys = rb_funcall(options, rb_intern("keys"), 0);
|
107
118
|
|
@@ -146,12 +157,15 @@ rb_magic_closed_p(VALUE self) {
|
|
146
157
|
return rb_attr_get(self, rb_intern("closed"));
|
147
158
|
}
|
148
159
|
|
149
|
-
/* Return a string describing file */
|
160
|
+
/* Return a string describing the named file */
|
150
161
|
RB_MAGIC_TYPE(file, FILE)
|
151
162
|
|
152
163
|
/* Return a string describing the string buffer */
|
153
164
|
RB_MAGIC_TYPE(buffer, BUFFER)
|
154
165
|
|
166
|
+
/* Return a string describing the file descriptor */
|
167
|
+
RB_MAGIC_TYPE(descriptor, DESCRIPTOR)
|
168
|
+
|
155
169
|
/* Get the flags as array of symbols */
|
156
170
|
static VALUE
|
157
171
|
rb_magic_getflags(VALUE self) {
|
@@ -205,21 +219,23 @@ Init_ruby_filemagic() {
|
|
205
219
|
|
206
220
|
rb_define_const(cFileMagic, "MAGIC_VERSION", rb_str_new2(version));
|
207
221
|
|
208
|
-
rb_define_singleton_method(cFileMagic, "
|
209
|
-
rb_define_singleton_method(cFileMagic, "
|
210
|
-
rb_define_singleton_method(cFileMagic, "
|
211
|
-
|
212
|
-
|
213
|
-
rb_define_method(cFileMagic, "
|
214
|
-
rb_define_method(cFileMagic, "
|
215
|
-
rb_define_method(cFileMagic, "
|
216
|
-
rb_define_method(cFileMagic, "
|
217
|
-
rb_define_method(cFileMagic, "
|
218
|
-
rb_define_method(cFileMagic, "
|
219
|
-
rb_define_method(cFileMagic, "
|
220
|
-
rb_define_method(cFileMagic, "
|
221
|
-
rb_define_method(cFileMagic, "
|
222
|
-
rb_define_method(cFileMagic, "
|
222
|
+
rb_define_singleton_method(cFileMagic, "library_version", rb_magic_version, 0);
|
223
|
+
rb_define_singleton_method(cFileMagic, "path", rb_magic_getpath, 0);
|
224
|
+
rb_define_singleton_method(cFileMagic, "flags", rb_magic_flags, 1);
|
225
|
+
rb_define_singleton_method(cFileMagic, "new", rb_magic_new, -1);
|
226
|
+
|
227
|
+
rb_define_method(cFileMagic, "initialize", rb_magic_init, -1);
|
228
|
+
rb_define_method(cFileMagic, "close", rb_magic_close, 0);
|
229
|
+
rb_define_method(cFileMagic, "closed?", rb_magic_closed_p, 0);
|
230
|
+
rb_define_method(cFileMagic, "file", rb_magic_file, -1);
|
231
|
+
rb_define_method(cFileMagic, "buffer", rb_magic_buffer, -1);
|
232
|
+
rb_define_method(cFileMagic, "descriptor", rb_magic_descriptor, -1);
|
233
|
+
rb_define_method(cFileMagic, "flags", rb_magic_getflags, 0);
|
234
|
+
rb_define_method(cFileMagic, "flags=", rb_magic_setflags, 1);
|
235
|
+
rb_define_method(cFileMagic, "list", rb_magic_list, -1);
|
236
|
+
rb_define_method(cFileMagic, "load", rb_magic_load, -1);
|
237
|
+
rb_define_method(cFileMagic, "check", rb_magic_check, -1);
|
238
|
+
rb_define_method(cFileMagic, "compile", rb_magic_compile, -1);
|
223
239
|
|
224
240
|
rb_alias(cFileMagic, rb_intern("valid?"), rb_intern("check"));
|
225
241
|
|
@@ -267,6 +283,15 @@ Init_ruby_filemagic() {
|
|
267
283
|
#ifdef MAGIC_APPLE
|
268
284
|
rb_define_const(cFileMagic, "MAGIC_APPLE", INT2FIX(MAGIC_APPLE));
|
269
285
|
#endif
|
286
|
+
#ifdef MAGIC_EXTENSION
|
287
|
+
rb_define_const(cFileMagic, "MAGIC_EXTENSION", INT2FIX(MAGIC_EXTENSION));
|
288
|
+
#endif
|
289
|
+
#ifdef MAGIC_COMPRESS_TRANSP
|
290
|
+
rb_define_const(cFileMagic, "MAGIC_COMPRESS_TRANSP", INT2FIX(MAGIC_COMPRESS_TRANSP));
|
291
|
+
#endif
|
292
|
+
#ifdef MAGIC_NODESC
|
293
|
+
rb_define_const(cFileMagic, "MAGIC_NODESC", INT2FIX(MAGIC_NODESC));
|
294
|
+
#endif
|
270
295
|
#ifdef MAGIC_NO_CHECK_COMPRESS
|
271
296
|
rb_define_const(cFileMagic, "MAGIC_NO_CHECK_COMPRESS", INT2FIX(MAGIC_NO_CHECK_COMPRESS));
|
272
297
|
#endif
|
data/ext/filemagic/filemagic.h
CHANGED
@@ -18,22 +18,22 @@
|
|
18
18
|
}\
|
19
19
|
}
|
20
20
|
|
21
|
-
#define RB_MAGIC_TYPE_FILE
|
22
|
-
#define RB_MAGIC_TYPE_BUFFER magic_buffer(ms,
|
21
|
+
#define RB_MAGIC_TYPE_FILE type = magic_file(ms, StringValuePtr(arg));
|
22
|
+
#define RB_MAGIC_TYPE_BUFFER { char *arg_str = StringValuePtr(arg); type = magic_buffer(ms, arg_str, RSTRING_LEN(arg)); }
|
23
|
+
#define RB_MAGIC_TYPE_DESCRIPTOR type = magic_descriptor(ms, NUM2INT(arg));
|
23
24
|
|
24
25
|
#define RB_MAGIC_TYPE(what, WHAT) \
|
25
26
|
static VALUE \
|
26
27
|
rb_magic_##what(int argc, VALUE *argv, VALUE self) {\
|
27
28
|
VALUE arg, simple, res;\
|
28
|
-
const char *
|
29
|
+
const char *type;\
|
29
30
|
magic_t ms;\
|
30
31
|
\
|
31
32
|
rb_scan_args(argc, argv, "11", &arg, &simple);\
|
32
|
-
\
|
33
|
-
str = StringValuePtr(arg);\
|
34
33
|
GetMagicSet(self, ms);\
|
35
34
|
\
|
36
|
-
|
35
|
+
RB_MAGIC_TYPE_##WHAT\
|
36
|
+
if (type == NULL) {\
|
37
37
|
rb_raise(rb_FileMagicError, "failed lookup: %s", magic_error(ms));\
|
38
38
|
}\
|
39
39
|
\
|
@@ -72,6 +72,7 @@ rb_magic_##what(int argc, VALUE *argv, VALUE self) {\
|
|
72
72
|
|
73
73
|
static VALUE cFileMagic, rb_FileMagicError;
|
74
74
|
|
75
|
+
static VALUE rb_magic_version(VALUE);
|
75
76
|
static VALUE rb_magic_getpath(VALUE);
|
76
77
|
static VALUE rb_magic_flags(VALUE, VALUE);
|
77
78
|
|
@@ -84,6 +85,7 @@ static VALUE rb_magic_closed_p(VALUE);
|
|
84
85
|
|
85
86
|
static VALUE rb_magic_file(int, VALUE*, VALUE);
|
86
87
|
static VALUE rb_magic_buffer(int, VALUE*, VALUE);
|
88
|
+
static VALUE rb_magic_descriptor(int, VALUE*, VALUE);
|
87
89
|
|
88
90
|
static VALUE rb_magic_getflags(VALUE);
|
89
91
|
static VALUE rb_magic_setflags(VALUE, VALUE);
|
data/lib/filemagic/magic.mgc
CHANGED
Binary file
|
data/lib/filemagic/version.rb
CHANGED
data/lib/filemagic.rb
CHANGED
@@ -9,6 +9,11 @@ require 'filemagic/version'
|
|
9
9
|
|
10
10
|
class FileMagic
|
11
11
|
|
12
|
+
unless ENV['MAGIC_SILENCE_VERSION_CHECK'] || MAGIC_VERSION == library_version
|
13
|
+
warn "#{self} v#{VERSION}: compiled magic version [#{MAGIC_VERSION}] " <<
|
14
|
+
"does not match with shared library magic version [#{library_version}]"
|
15
|
+
end
|
16
|
+
|
12
17
|
DEFAULT_MAGIC = __FILE__.sub(/\.rb\z/, '/magic.mgc')
|
13
18
|
|
14
19
|
ENV['MAGIC'] ||= DEFAULT_MAGIC unless path
|
@@ -20,15 +25,18 @@ class FileMagic
|
|
20
25
|
:symlink, # Follow symlinks
|
21
26
|
:compress, # Check inside compressed files
|
22
27
|
:devices, # Look at the contents of devices
|
23
|
-
:mime_type, # Return
|
28
|
+
:mime_type, # Return the MIME type
|
24
29
|
:continue, # Return all matches
|
25
30
|
:check, # Print warnings to stderr
|
26
31
|
:preserve_atime, # Restore access time on exit
|
27
|
-
:raw, # Don't
|
32
|
+
:raw, # Don't convert unprintable chars
|
28
33
|
:error, # Handle ENOENT etc as real errors
|
29
|
-
:mime_encoding, # Return
|
34
|
+
:mime_encoding, # Return the MIME encoding
|
30
35
|
:mime, # MAGIC_MIME_TYPE | MAGIC_MIME_ENCODING
|
31
|
-
:apple, # Return the Apple creator
|
36
|
+
:apple, # Return the Apple creator/type
|
37
|
+
:extension, # Return a /-separated list of extensions
|
38
|
+
:compress_transp, # Check inside compressed files but not report compression
|
39
|
+
:nodesc, # MAGIC_EXTENSION | MAGIC_MIME | MAGIC_APPLE
|
32
40
|
:no_check_compress, # Don't check for compressed files
|
33
41
|
:no_check_tar, # Don't check for tar files
|
34
42
|
:no_check_soft, # Don't check magic entries
|
@@ -36,7 +44,7 @@ class FileMagic
|
|
36
44
|
:no_check_elf, # Don't check for elf details
|
37
45
|
:no_check_text, # Don't check for text files
|
38
46
|
:no_check_cdf, # Don't check for cdf files
|
39
|
-
:no_check_tokens, # Don't check
|
47
|
+
:no_check_tokens, # Don't check tokens
|
40
48
|
:no_check_encoding, # Don't check text encodings
|
41
49
|
:no_check_builtin, # No built-in tests; only consult the magic file
|
42
50
|
|
@@ -131,8 +139,15 @@ class FileMagic
|
|
131
139
|
@simplified
|
132
140
|
end
|
133
141
|
|
134
|
-
def io(io, length = 8)
|
142
|
+
def io(io, length = 8, rewind = false)
|
143
|
+
pos = io.pos if rewind
|
135
144
|
buffer(io.read(length))
|
145
|
+
ensure
|
146
|
+
io.pos = pos if pos
|
147
|
+
end
|
148
|
+
|
149
|
+
def fd(fd)
|
150
|
+
descriptor(fd.respond_to?(:fileno) ? fd.fileno : fd)
|
136
151
|
end
|
137
152
|
|
138
153
|
def inspect
|
data/test/filemagic_test.rb
CHANGED
@@ -26,7 +26,10 @@ magic file from #{FileMagic.path}
|
|
26
26
|
|
27
27
|
if File.symlink?(path_to('pylink'))
|
28
28
|
res = fm.file(path_to('pylink'))
|
29
|
-
assert_equal(
|
29
|
+
assert_equal(match_version(
|
30
|
+
0 => "symbolic link to `pyfile'",
|
31
|
+
5.22 => 'symbolic link to pyfile'
|
32
|
+
), res.strip)
|
30
33
|
end
|
31
34
|
|
32
35
|
fm.close
|
@@ -59,6 +62,61 @@ magic file from #{FileMagic.path}
|
|
59
62
|
assert_equal('POSIX shell script, ASCII text executable', res)
|
60
63
|
end
|
61
64
|
|
65
|
+
def test_nil_buffer
|
66
|
+
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
67
|
+
assert_raise(TypeError) { fm.buffer(nil) }
|
68
|
+
fm.close
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_descriptor
|
72
|
+
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
73
|
+
|
74
|
+
python_script = match_version(
|
75
|
+
0 => 'a python script, ASCII text executable',
|
76
|
+
5.11 => 'Python script, ASCII text executable'
|
77
|
+
)
|
78
|
+
|
79
|
+
fd_for('pyfile') { |fd|
|
80
|
+
res = fm.descriptor(fd)
|
81
|
+
assert_equal(python_script, res)
|
82
|
+
}
|
83
|
+
|
84
|
+
if File.symlink?(path_to('pylink'))
|
85
|
+
fd_for('pylink') { |fd|
|
86
|
+
res = fm.descriptor(fd)
|
87
|
+
assert_equal(python_script, res.strip)
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
fm.close
|
92
|
+
fm = FileMagic.new(FileMagic::MAGIC_SYMLINK)
|
93
|
+
|
94
|
+
fd_for('pylink') { |fd|
|
95
|
+
res = fm.descriptor(fd)
|
96
|
+
assert_equal(python_script, res)
|
97
|
+
}
|
98
|
+
|
99
|
+
fm.close
|
100
|
+
fm = FileMagic.new(FileMagic::MAGIC_SYMLINK | FileMagic::MAGIC_MIME)
|
101
|
+
|
102
|
+
fd_for('pylink') { |fd|
|
103
|
+
res = fm.descriptor(fd)
|
104
|
+
assert_equal('text/plain; charset=us-ascii', res)
|
105
|
+
}
|
106
|
+
|
107
|
+
fm.close
|
108
|
+
fm = FileMagic.new(FileMagic::MAGIC_COMPRESS)
|
109
|
+
|
110
|
+
fd_for('pyfile-compressed.gz') { |fd|
|
111
|
+
res = fm.descriptor(fd)
|
112
|
+
gzip_compressed = 'gzip compressed data, was "pyfile-compressed"'
|
113
|
+
assert_match(Gem.win_platform? ? /^#{gzip_compressed}/ :
|
114
|
+
/^#{python_script} \(#{gzip_compressed}/, res)
|
115
|
+
}
|
116
|
+
|
117
|
+
fm.close
|
118
|
+
end
|
119
|
+
|
62
120
|
def test_check
|
63
121
|
return if Gem.win_platform?
|
64
122
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
@@ -72,7 +130,10 @@ magic file from #{FileMagic.path}
|
|
72
130
|
fm = FileMagic.new(FileMagic::MAGIC_NONE)
|
73
131
|
res = silence_stderr { fm.check(path_to('perl.mgc')) }
|
74
132
|
fm.close
|
75
|
-
assert(
|
133
|
+
assert(match_version(
|
134
|
+
0 => res,
|
135
|
+
5.39 => !res
|
136
|
+
))
|
76
137
|
end
|
77
138
|
|
78
139
|
def test_compile
|
@@ -180,7 +241,8 @@ magic file from #{FileMagic.path}
|
|
180
241
|
assert_equal(match_version(
|
181
242
|
0 => 'application/vnd.ms-office',
|
182
243
|
5.11 => 'application/msword',
|
183
|
-
5.14 => 'application/vnd.ms-office'
|
244
|
+
5.14 => 'application/vnd.ms-office',
|
245
|
+
5.39 => 'application/vnd.ms-excel'
|
184
246
|
), fm.file(path_to('excel-example.xls')))
|
185
247
|
end
|
186
248
|
|
@@ -213,6 +275,12 @@ magic file from #{FileMagic.path}
|
|
213
275
|
File.join(dir, file)
|
214
276
|
end
|
215
277
|
|
278
|
+
def fd_for(file)
|
279
|
+
File.open(path_to(file)) { |f| yield f.fileno }
|
280
|
+
rescue Errno::EBADF => err
|
281
|
+
warn err.to_s
|
282
|
+
end
|
283
|
+
|
216
284
|
def silence_stderr
|
217
285
|
require 'nuggets/io/redirect'
|
218
286
|
$stderr.redirect { yield }
|
data/test/pylink
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
test/pyfile
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-filemagic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Whitton
|
8
8
|
- Jens Wille
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hen
|
@@ -17,20 +17,20 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '0.
|
20
|
+
version: '0.9'
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.
|
23
|
+
version: 0.9.1
|
24
24
|
type: :development
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - "~>"
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '0.
|
30
|
+
version: '0.9'
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.9.1
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rake
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,9 @@ extra_rdoc_files:
|
|
83
83
|
- ChangeLog
|
84
84
|
- ext/filemagic/filemagic.c
|
85
85
|
files:
|
86
|
+
- CONTRIBUTING.md
|
86
87
|
- ChangeLog
|
88
|
+
- Dockerfile
|
87
89
|
- README
|
88
90
|
- Rakefile
|
89
91
|
- TODO
|
@@ -110,13 +112,15 @@ licenses:
|
|
110
112
|
metadata: {}
|
111
113
|
post_install_message: |2+
|
112
114
|
|
113
|
-
ruby-filemagic-0.
|
115
|
+
ruby-filemagic-0.7.3 [2022-01-07]:
|
114
116
|
|
115
|
-
*
|
117
|
+
* Dockerfile to build native extension (pull request #26 by Pavel Lobashov).
|
118
|
+
* Include paths for ARM-based Apple Macs (Apple Silicon) (pull request #35 by
|
119
|
+
@545ch4).
|
116
120
|
|
117
121
|
rdoc_options:
|
118
122
|
- "--title"
|
119
|
-
- ruby-filemagic Application documentation (v0.
|
123
|
+
- ruby-filemagic Application documentation (v0.7.3)
|
120
124
|
- "--charset"
|
121
125
|
- UTF-8
|
122
126
|
- "--line-numbers"
|
@@ -136,9 +140,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
140
|
- !ruby/object:Gem::Version
|
137
141
|
version: '0'
|
138
142
|
requirements: []
|
139
|
-
|
140
|
-
|
141
|
-
signing_key:
|
143
|
+
rubygems_version: 3.2.5
|
144
|
+
signing_key:
|
142
145
|
specification_version: 4
|
143
146
|
summary: Ruby bindings to the magic(4) library
|
144
147
|
test_files: []
|
148
|
+
...
|
data/test/pylink
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"""
|