diff options
author | Christian Grothoff <grothoff@gnunet.org> | 2023-09-03 00:54:02 +0200 |
---|---|---|
committer | Christian Grothoff <grothoff@gnunet.org> | 2023-09-03 00:54:02 +0200 |
commit | 7a6166a6e8ca42c72a920d3ba744670316a9aa01 (patch) | |
tree | c58ab4259bb93fa83320b3ef48df74499d65b1e4 | |
parent | b86f932fa67b2348b87c00260510af7c68e48051 (diff) | |
download | libextractor-7a6166a6e8ca42c72a920d3ba744670316a9aa01.tar.gz libextractor-7a6166a6e8ca42c72a920d3ba744670316a9aa01.zip |
fix #7889 using patch form Arch as suggested by reporter
-rw-r--r-- | src/plugins/exiv2_extractor.cc | 106 |
1 files changed, 100 insertions, 6 deletions
diff --git a/src/plugins/exiv2_extractor.cc b/src/plugins/exiv2_extractor.cc index 78f9bda..d32ed6a 100644 --- a/src/plugins/exiv2_extractor.cc +++ b/src/plugins/exiv2_extractor.cc | |||
@@ -90,7 +90,11 @@ virtual int close (); | |||
90 | * @param rcount number of bytes to read | 90 | * @param rcount number of bytes to read |
91 | * @return buffer with data read, empty buffer (!) on failure (!) | 91 | * @return buffer with data read, empty buffer (!) on failure (!) |
92 | */ | 92 | */ |
93 | #if EXIV2_TEST_VERSION (0,28,0) | ||
94 | virtual Exiv2::DataBuf read (size_t rcount); | ||
95 | #else | ||
93 | virtual Exiv2::DataBuf read (long rcount); | 96 | virtual Exiv2::DataBuf read (long rcount); |
97 | #endif | ||
94 | 98 | ||
95 | /** | 99 | /** |
96 | * Read up to 'rcount' bytes into 'buf'. | 100 | * Read up to 'rcount' bytes into 'buf'. |
@@ -99,8 +103,17 @@ virtual Exiv2::DataBuf read (long rcount); | |||
99 | * @param rcount size of 'buf' | 103 | * @param rcount size of 'buf' |
100 | * @return number of bytes read successfully, 0 on failure (!) | 104 | * @return number of bytes read successfully, 0 on failure (!) |
101 | */ | 105 | */ |
106 | #if EXIV2_TEST_VERSION (0,28,0) | ||
107 | virtual size_t read (Exiv2::byte *buf, | ||
108 | size_t rcount); | ||
109 | #else | ||
102 | virtual long read (Exiv2::byte *buf, | 110 | virtual long read (Exiv2::byte *buf, |
103 | long rcount); | 111 | long rcount); |
112 | #endif | ||
113 | |||
114 | #if EXIV2_TEST_VERSION (0,28,0) | ||
115 | virtual void populateFakeData(); | ||
116 | #endif | ||
104 | 117 | ||
105 | /** | 118 | /** |
106 | * Read a single character. | 119 | * Read a single character. |
@@ -117,8 +130,13 @@ virtual int getb (); | |||
117 | * @param wcount how many bytes to write | 130 | * @param wcount how many bytes to write |
118 | * @return -1 (always fails) | 131 | * @return -1 (always fails) |
119 | */ | 132 | */ |
133 | #if EXIV2_TEST_VERSION(0,28,0) | ||
134 | virtual size_t write (const Exiv2::byte *data, | ||
135 | size_t wcount); | ||
136 | #else | ||
120 | virtual long write (const Exiv2::byte *data, | 137 | virtual long write (const Exiv2::byte *data, |
121 | long wcount); | 138 | long wcount); |
139 | #endif | ||
122 | 140 | ||
123 | /** | 141 | /** |
124 | * Write to stream. | 142 | * Write to stream. |
@@ -126,7 +144,11 @@ virtual long write (const Exiv2::byte *data, | |||
126 | * @param src stream to copy | 144 | * @param src stream to copy |
127 | * @return -1 (always fails) | 145 | * @return -1 (always fails) |
128 | */ | 146 | */ |
147 | #if EXIV2_TEST_VERSION(0,28,0) | ||
148 | virtual size_t write (Exiv2::BasicIo &src); | ||
149 | #else | ||
129 | virtual long write (Exiv2::BasicIo &src); | 150 | virtual long write (Exiv2::BasicIo &src); |
151 | #endif | ||
130 | 152 | ||
131 | /** | 153 | /** |
132 | * Write a single byte. | 154 | * Write a single byte. |
@@ -172,7 +194,11 @@ virtual int munmap (); | |||
172 | * | 194 | * |
173 | * @return -1 on error | 195 | * @return -1 on error |
174 | */ | 196 | */ |
197 | #if EXIV2_TEST_VERSION(0,28,0) | ||
198 | virtual size_t tell (void) const; | ||
199 | #else | ||
175 | virtual long int tell (void) const; | 200 | virtual long int tell (void) const; |
201 | #endif | ||
176 | 202 | ||
177 | /** | 203 | /** |
178 | * Return overall size of the file. | 204 | * Return overall size of the file. |
@@ -213,7 +239,11 @@ virtual bool eof () const; | |||
213 | * | 239 | * |
214 | * @throws error | 240 | * @throws error |
215 | */ | 241 | */ |
242 | #if EXIV2_TEST_VERSION(0,28,0) | ||
243 | virtual const std::string& path () const noexcept; | ||
244 | #else | ||
216 | virtual std::string path () const; | 245 | virtual std::string path () const; |
246 | #endif | ||
217 | 247 | ||
218 | #ifdef EXV_UNICODE_PATH | 248 | #ifdef EXV_UNICODE_PATH |
219 | /** | 249 | /** |
@@ -230,7 +260,11 @@ virtual std::wstring wpath () const; | |||
230 | * | 260 | * |
231 | * @throws error | 261 | * @throws error |
232 | */ | 262 | */ |
263 | #if EXIV2_TEST_VERSION(0,28,0) | ||
264 | virtual Exiv2::BasicIo::UniquePtr temporary () const; | ||
265 | #else | ||
233 | virtual Exiv2::BasicIo::AutoPtr temporary () const; | 266 | virtual Exiv2::BasicIo::AutoPtr temporary () const; |
267 | #endif | ||
234 | 268 | ||
235 | }; | 269 | }; |
236 | 270 | ||
@@ -266,7 +300,11 @@ ExtractorIO::close () | |||
266 | * @return buffer with data read, empty buffer (!) on failure (!) | 300 | * @return buffer with data read, empty buffer (!) on failure (!) |
267 | */ | 301 | */ |
268 | Exiv2::DataBuf | 302 | Exiv2::DataBuf |
303 | #if EXIV2_TEST_VERSION (0,28,0) | ||
304 | ExtractorIO::read (size_t rcount) | ||
305 | #else | ||
269 | ExtractorIO::read (long rcount) | 306 | ExtractorIO::read (long rcount) |
307 | #endif | ||
270 | { | 308 | { |
271 | void *data; | 309 | void *data; |
272 | ssize_t ret; | 310 | ssize_t ret; |
@@ -284,9 +322,15 @@ ExtractorIO::read (long rcount) | |||
284 | * @param rcount size of 'buf' | 322 | * @param rcount size of 'buf' |
285 | * @return number of bytes read successfully, 0 on failure (!) | 323 | * @return number of bytes read successfully, 0 on failure (!) |
286 | */ | 324 | */ |
325 | #if EXIV2_TEST_VERSION (0,28,0) | ||
326 | size_t | ||
327 | ExtractorIO::read (Exiv2::byte *buf, | ||
328 | size_t rcount) | ||
329 | #else | ||
287 | long | 330 | long |
288 | ExtractorIO::read (Exiv2::byte *buf, | 331 | ExtractorIO::read (Exiv2::byte *buf, |
289 | long rcount) | 332 | long rcount) |
333 | #endif | ||
290 | { | 334 | { |
291 | void *data; | 335 | void *data; |
292 | ssize_t ret; | 336 | ssize_t ret; |
@@ -305,6 +349,12 @@ ExtractorIO::read (Exiv2::byte *buf, | |||
305 | return got; | 349 | return got; |
306 | } | 350 | } |
307 | 351 | ||
352 | #if EXIV2_TEST_VERSION (0,28,0) | ||
353 | void ExtractorIO::populateFakeData() | ||
354 | { | ||
355 | return; | ||
356 | } | ||
357 | #endif | ||
308 | 358 | ||
309 | /** | 359 | /** |
310 | * Read a single character. | 360 | * Read a single character. |
@@ -319,7 +369,9 @@ ExtractorIO::getb () | |||
319 | const unsigned char *r; | 369 | const unsigned char *r; |
320 | 370 | ||
321 | if (1 != ec->read (ec->cls, &data, 1)) | 371 | if (1 != ec->read (ec->cls, &data, 1)) |
322 | #if EXIV2_TEST_VERSION (0,27,0) | 372 | #if EXIV2_TEST_VERSION(0,28,0) |
373 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
374 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
323 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 375 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
324 | #else | 376 | #else |
325 | throw Exiv2::BasicError<char> (42 /* error code */); | 377 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -336,9 +388,15 @@ ExtractorIO::getb () | |||
336 | * @param wcount how many bytes to write | 388 | * @param wcount how many bytes to write |
337 | * @return -1 (always fails) | 389 | * @return -1 (always fails) |
338 | */ | 390 | */ |
391 | #if EXIV2_TEST_VERSION(0,28,0) | ||
392 | size_t | ||
393 | ExtractorIO::write (const Exiv2::byte *data, | ||
394 | size_t wcount) | ||
395 | #else | ||
339 | long | 396 | long |
340 | ExtractorIO::write (const Exiv2::byte *data, | 397 | ExtractorIO::write (const Exiv2::byte *data, |
341 | long wcount) | 398 | long wcount) |
399 | #endif | ||
342 | { | 400 | { |
343 | return -1; | 401 | return -1; |
344 | } | 402 | } |
@@ -350,7 +408,11 @@ ExtractorIO::write (const Exiv2::byte *data, | |||
350 | * @param src stream to copy | 408 | * @param src stream to copy |
351 | * @return -1 (always fails) | 409 | * @return -1 (always fails) |
352 | */ | 410 | */ |
411 | #if EXIV2_TEST_VERSION(0,28,0) | ||
412 | size_t | ||
413 | #else | ||
353 | long | 414 | long |
415 | #endif | ||
354 | ExtractorIO::write (Exiv2::BasicIo &src) | 416 | ExtractorIO::write (Exiv2::BasicIo &src) |
355 | { | 417 | { |
356 | return -1; | 418 | return -1; |
@@ -378,7 +440,9 @@ ExtractorIO::putb (Exiv2::byte data) | |||
378 | void | 440 | void |
379 | ExtractorIO::transfer (Exiv2::BasicIo& src) | 441 | ExtractorIO::transfer (Exiv2::BasicIo& src) |
380 | { | 442 | { |
381 | #if EXIV2_TEST_VERSION (0,27,0) | 443 | #if EXIV2_TEST_VERSION(0,28,0) |
444 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
445 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
382 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 446 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
383 | #else | 447 | #else |
384 | throw Exiv2::BasicError<char> (42 /* error code */); | 448 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -427,7 +491,9 @@ ExtractorIO::seek (long offset, | |||
427 | Exiv2::byte * | 491 | Exiv2::byte * |
428 | ExtractorIO::mmap (bool isWritable) | 492 | ExtractorIO::mmap (bool isWritable) |
429 | { | 493 | { |
430 | #if EXIV2_TEST_VERSION (0,27,0) | 494 | #if EXIV2_TEST_VERSION (0,28,0) |
495 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
496 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
431 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 497 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
432 | #else | 498 | #else |
433 | throw Exiv2::BasicError<char> (42 /* error code */); | 499 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -452,7 +518,11 @@ ExtractorIO::munmap () | |||
452 | * | 518 | * |
453 | * @return -1 on error | 519 | * @return -1 on error |
454 | */ | 520 | */ |
521 | #if EXIV2_TEST_VERSION(0,28,0) | ||
522 | size_t | ||
523 | #else | ||
455 | long int | 524 | long int |
525 | #endif | ||
456 | ExtractorIO::tell (void) const | 526 | ExtractorIO::tell (void) const |
457 | { | 527 | { |
458 | return (long) ec->seek (ec->cls, 0, SEEK_CUR); | 528 | return (long) ec->seek (ec->cls, 0, SEEK_CUR); |
@@ -516,10 +586,17 @@ ExtractorIO::eof () const | |||
516 | * | 586 | * |
517 | * @throws error | 587 | * @throws error |
518 | */ | 588 | */ |
589 | #if EXIV2_TEST_VERSION (0,28,0) | ||
590 | const std::string& | ||
591 | ExtractorIO::path () const noexcept | ||
592 | #else | ||
519 | std::string | 593 | std::string |
520 | ExtractorIO::path () const | 594 | ExtractorIO::path () const |
595 | #endif | ||
521 | { | 596 | { |
522 | #if EXIV2_TEST_VERSION (0,27,0) | 597 | #if EXIV2_TEST_VERSION (0,28,0) |
598 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
599 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
523 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 600 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
524 | #else | 601 | #else |
525 | throw Exiv2::BasicError<char> (42 /* error code */); | 602 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -536,7 +613,9 @@ ExtractorIO::path () const | |||
536 | std::wstring | 613 | std::wstring |
537 | ExtractorIO::wpath () const | 614 | ExtractorIO::wpath () const |
538 | { | 615 | { |
539 | #if EXIV2_TEST_VERSION (0,27,0) | 616 | #if EXIV2_TEST_VERSION (0,28,0) |
617 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
618 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
540 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 619 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
541 | #else | 620 | #else |
542 | throw Exiv2::BasicError<char> (42 /* error code */); | 621 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -552,11 +631,17 @@ ExtractorIO::wpath () const | |||
552 | * | 631 | * |
553 | * @throws error | 632 | * @throws error |
554 | */ | 633 | */ |
634 | #if EXIV2_TEST_VERSION(0,28,0) | ||
635 | Exiv2::BasicIo::UniquePtr | ||
636 | #else | ||
555 | Exiv2::BasicIo::AutoPtr | 637 | Exiv2::BasicIo::AutoPtr |
638 | #endif | ||
556 | ExtractorIO::temporary () const | 639 | ExtractorIO::temporary () const |
557 | { | 640 | { |
558 | fprintf (stderr, "throwing temporary error\n"); | 641 | fprintf (stderr, "throwing temporary error\n"); |
559 | #if EXIV2_TEST_VERSION (0,27,0) | 642 | #if EXIV2_TEST_VERSION(0,28,0) |
643 | throw Exiv2::Error (Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed); | ||
644 | #elif EXIV2_TEST_VERSION (0,27,0) | ||
560 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); | 645 | throw Exiv2::BasicError<char> (Exiv2::kerDecodeLangAltQualifierFailed); |
561 | #else | 646 | #else |
562 | throw Exiv2::BasicError<char> (42 /* error code */); | 647 | throw Exiv2::BasicError<char> (42 /* error code */); |
@@ -737,8 +822,13 @@ EXTRACTOR_exiv2_extract_method (struct EXTRACTOR_ExtractContext *ec) | |||
737 | #if ! EXIV2_TEST_VERSION (0,24,0) | 822 | #if ! EXIV2_TEST_VERSION (0,24,0) |
738 | Exiv2::LogMsg::setLevel (Exiv2::LogMsg::mute); | 823 | Exiv2::LogMsg::setLevel (Exiv2::LogMsg::mute); |
739 | #endif | 824 | #endif |
825 | #if EXIV2_TEST_VERSION(0,28,0) | ||
826 | std::unique_ptr<Exiv2::BasicIo> eio (new ExtractorIO (ec)); | ||
827 | Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open (std::move(eio)); | ||
828 | #else | ||
740 | std::auto_ptr<Exiv2::BasicIo> eio (new ExtractorIO (ec)); | 829 | std::auto_ptr<Exiv2::BasicIo> eio (new ExtractorIO (ec)); |
741 | Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open (eio); | 830 | Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open (eio); |
831 | #endif | ||
742 | if (0 == image.get ()) | 832 | if (0 == image.get ()) |
743 | return; | 833 | return; |
744 | image->readMetadata (); | 834 | image->readMetadata (); |
@@ -822,7 +912,11 @@ EXTRACTOR_exiv2_extract_method (struct EXTRACTOR_ExtractContext *ec) | |||
822 | ADDXMP ("Xmp.lr.hierarchicalSubject", EXTRACTOR_METATYPE_SUBJECT); | 912 | ADDXMP ("Xmp.lr.hierarchicalSubject", EXTRACTOR_METATYPE_SUBJECT); |
823 | } | 913 | } |
824 | } | 914 | } |
915 | #if EXIV2_TEST_VERSION (0,28,0) | ||
916 | catch (const Exiv2::Error& e) | ||
917 | #else | ||
825 | catch (const Exiv2::AnyError& e) | 918 | catch (const Exiv2::AnyError& e) |
919 | #endif | ||
826 | { | 920 | { |
827 | #if DEBUG | 921 | #if DEBUG |
828 | std::cerr << "Caught Exiv2 exception '" << e << "'\n"; | 922 | std::cerr << "Caught Exiv2 exception '" << e << "'\n"; |