exif 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/exif/data.c +38 -11
- data/lib/exif/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d658dd771d13abedfe7ab02bfede763a0021132
|
4
|
+
data.tar.gz: 56327a0dade4446064ffbed2a849836598b891dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1e5a4b2d2826d24dcb5d5e2e59a6f1f4df7a2753ed17526b83c236f164d74139f4037833e55f913a5a3dc77f6e32398c9bdf48893f701647305b36ed22980c2
|
7
|
+
data.tar.gz: dd5a25648daaa66665ccc0c3ad9b3da78a2f02b1ee2b77c016ad45d082293c61b4df75590f82584722b7806b08add02c98cd8e1aaee13aa9b32dd9d40788645d
|
data/ext/exif/data.c
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "data.h"
|
2
2
|
#include "ruby.h"
|
3
3
|
|
4
|
+
#include <libexif/exif-log.h>
|
4
5
|
#include <libexif/exif-data.h>
|
5
6
|
#include <libexif/exif-loader.h>
|
6
7
|
#include <stdint.h>
|
@@ -171,6 +172,15 @@ static VALUE exif_entry_to_rb_value(ExifEntry *);
|
|
171
172
|
static VALUE rational_to_num(ExifRational rational);
|
172
173
|
static VALUE srational_to_num(ExifSRational srational);
|
173
174
|
|
175
|
+
static void exif_corrupt_log_func(ExifLog *log, ExifLogCode code,
|
176
|
+
const char *domain, const char *format,
|
177
|
+
va_list args, void *data) {
|
178
|
+
if (code == EXIF_LOG_CODE_CORRUPT_DATA) {
|
179
|
+
unsigned int *corrupt = (unsigned int *)data;
|
180
|
+
*corrupt = 1;
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
174
184
|
void init_data() {
|
175
185
|
int length;
|
176
186
|
|
@@ -186,21 +196,38 @@ void init_data() {
|
|
186
196
|
|
187
197
|
VALUE new (VALUE self, VALUE input) {
|
188
198
|
ExifData *ed;
|
189
|
-
VALUE read_data;
|
190
199
|
|
191
|
-
if (TYPE(input)
|
192
|
-
read_data = input;
|
193
|
-
else if (rb_respond_to(input, rb_intern("read")))
|
194
|
-
read_data = rb_funcall(input, rb_intern("read"), 0);
|
195
|
-
else
|
200
|
+
if (TYPE(input) != T_STRING && !rb_respond_to(input, rb_intern("read")))
|
196
201
|
rb_raise(rb_eTypeError, "wrong argument type %s (expected String or IO)",
|
197
202
|
rb_obj_classname(input));
|
198
203
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
+
if (TYPE(input) == T_STRING) {
|
205
|
+
unsigned int corrupt = 0;
|
206
|
+
ExifLog *log = exif_log_new();
|
207
|
+
exif_log_set_func(log, exif_corrupt_log_func, (void *)&corrupt);
|
208
|
+
ed = exif_data_new();
|
209
|
+
exif_data_log(ed, log);
|
210
|
+
exif_data_load_data(ed, (unsigned char *)RSTRING_PTR(input),
|
211
|
+
RSTRING_LEN(input));
|
212
|
+
exif_log_unref(log);
|
213
|
+
if (corrupt) {
|
214
|
+
exif_data_free(ed);
|
215
|
+
ed = NULL;
|
216
|
+
}
|
217
|
+
} else {
|
218
|
+
ExifLoader *loader = exif_loader_new();
|
219
|
+
VALUE buffer;
|
220
|
+
while (1) {
|
221
|
+
buffer = rb_funcall(input, rb_intern("read"), 1, INT2FIX(1024));
|
222
|
+
if (TYPE(buffer) == T_NIL)
|
223
|
+
break;
|
224
|
+
if (!exif_loader_write(loader, (unsigned char *)RSTRING_PTR(buffer),
|
225
|
+
RSTRING_LEN(buffer)))
|
226
|
+
break;
|
227
|
+
}
|
228
|
+
ed = exif_loader_get_data(loader);
|
229
|
+
exif_loader_unref(loader);
|
230
|
+
}
|
204
231
|
if (!ed)
|
205
232
|
rb_raise(rb_eNotReadable, "File not readable or no EXIF data in file.");
|
206
233
|
|
data/lib/exif/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exif
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jian Weihang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|