[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:47:04 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=5f1d52e

The following commit has been merged in the master branch:
commit 5f1d52e4971fc3087df54248b6b172e1f86c9b0a
Author: Robin Mills <robin at clanmills.com>
Date:   Sun Sep 25 22:43:40 2016 +0000

    #1230 Added stdin-test and fixing issue identified by the test.
---
 Makefile                 |   3 ++
 config/Makefile.in       |   3 ++
 include/exiv2/xmp.hpp    |  13 ++++++
 src/actions.cpp          |   6 ++-
 src/actions.hpp          |   2 +-
 src/error.cpp            |   1 +
 src/exiv2.cpp            | 102 +++++++++++++++++++++++++++++++++++++-------
 src/exiv2app.hpp         |  48 +--------------------
 src/image.cpp            |   5 ++-
 src/jpgimage.cpp         |   1 +
 src/tiffimage.cpp        |  11 +++--
 src/tiffvisitor.cpp      |   8 +++-
 src/xmp.cpp              |   1 +
 test/Makefile            |   1 +
 test/data/stdin-test.out | 107 +++++++++++++++++++++++++++++++++++++++++++++++
 test/data/webp-test.out  |   8 ++--
 test/stdin-test.sh       |  42 +++++++++++++++++++
 17 files changed, 286 insertions(+), 76 deletions(-)

diff --git a/Makefile b/Makefile
index 662b41b..9a0507d 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,9 @@ preview-test preview:
 icc-test icc:
 	cd test && ./icc-test.sh
 
+stdin-test:
+	cd test && ./stdin-test.sh
+
 # convenience target for building individual sample programs
 addmoddel		exifcomment		exifvalue	httptest	iptctest		mmap-test	stringto-test \
 exifdata		iotest			key-test	path-test	taglist			write2-test write-test	\
diff --git a/config/Makefile.in b/config/Makefile.in
index 662b41b..9a0507d 100644
--- a/config/Makefile.in
+++ b/config/Makefile.in
@@ -106,6 +106,9 @@ preview-test preview:
 icc-test icc:
 	cd test && ./icc-test.sh
 
+stdin-test:
+	cd test && ./stdin-test.sh
+
 # convenience target for building individual sample programs
 addmoddel		exifcomment		exifvalue	httptest	iptctest		mmap-test	stringto-test \
 exifdata		iotest			key-test	path-test	taglist			write2-test write-test	\
diff --git a/include/exiv2/xmp.hpp b/include/exiv2/xmp.hpp
index b6e5f7a..8a768d4 100644
--- a/include/exiv2/xmp.hpp
+++ b/include/exiv2/xmp.hpp
@@ -245,11 +245,24 @@ namespace Exiv2 {
         bool empty() const;
         //! Get the number of metadata entries
         long count() const;
+
+        //! are we to use the packet?
+        bool usePacket() const { return usePacket_; } ;
+
+        //! set usePacket_
+        bool usePacket(bool b) { bool r = usePacket_; usePacket_=b ; return r; };
+        //! setPacket
+        void setPacket(const std::string& xmpPacket) { xmpPacket_ = xmpPacket ; usePacket(false); };
+        // ! getPacket
+        const std::string& xmpPacket() const { return xmpPacket_ ; };
+
         //@}
 
     private:
         // DATA
         XmpMetadata xmpMetadata_;
+        std::string xmpPacket_  ;
+        bool        usePacket_  ;
     }; // class XmpData
 
     /*!
diff --git a/src/actions.cpp b/src/actions.cpp
index bcb086b..591d3e6 100644
--- a/src/actions.cpp
+++ b/src/actions.cpp
@@ -1300,7 +1300,7 @@ namespace Action {
 
         if (0 == rc && (Params::instance().target_ & (Params::ctXmpSidecar|Params::ctXmpRaw)) ) {
             std::string xmpPath = newFilePath(path,".xmp");
-            rc = bStdin ? insertXmpPacket(path,stdIn) : insertXmpPacket(path,xmpPath);
+            rc = bStdin ? insertXmpPacket(path,stdIn,bStdin) : insertXmpPacket(path,xmpPath);
         }
 
         if (0 == rc && Params::instance().target_ & Params::ctIccProfile) {
@@ -1335,7 +1335,7 @@ namespace Action {
         return insertXmpPacket(path,xmpBlob);
     }
 
-    int Insert::insertXmpPacket(const std::string& path,const Exiv2::DataBuf& xmpBlob) const
+    int Insert::insertXmpPacket(const std::string& path,const Exiv2::DataBuf& xmpBlob,bool usePacket) const
     {
         std::string xmpPacket;
         for ( long i = 0 ; i < xmpBlob.size_ ; i++ ) {
@@ -1344,7 +1344,9 @@ namespace Action {
         Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path);
         assert(image.get() != 0);
         image->readMetadata();
+        image->clearXmpData();
         image->setXmpPacket(xmpPacket);
+        image->writeXmpFromPacket(usePacket);
         image->writeMetadata();
 
         return 0;
diff --git a/src/actions.hpp b/src/actions.hpp
index 42adfb4..24a279f 100644
--- a/src/actions.hpp
+++ b/src/actions.hpp
@@ -353,7 +353,7 @@ namespace Action {
         /*!
           @brief Insert xmp from a DataBuf into file \em path.
          */
-        int insertXmpPacket(const std::string& path,const Exiv2::DataBuf& xmpBlob) const;
+        int insertXmpPacket(const std::string& path,const Exiv2::DataBuf& xmpBlob,bool usePacket=false) const;
 
         /*!
           @brief Insert an ICC profile from a file into file \em path.
diff --git a/src/error.cpp b/src/error.cpp
index d92ea7f..663be0d 100644
--- a/src/error.cpp
+++ b/src/error.cpp
@@ -105,6 +105,7 @@ namespace {
         { 51, N_("TIFF array element tag %1 has wrong type") }, // %1=tag number
         { 52, N_("%1 has invalid XMP value type `%2'") }, // %1=key, %2=value type
         { 53, N_("Not a valid ICC Profile") },
+        { 54, N_("Not valid XMP") },
     };
 
 }
diff --git a/src/exiv2.cpp b/src/exiv2.cpp
index f92b9ae..428706a 100644
--- a/src/exiv2.cpp
+++ b/src/exiv2.cpp
@@ -877,6 +877,85 @@ int Params::nonoption(const std::string& argv)
     return rc;
 } // Params::nonoption
 
+static int readFileToBuf(FILE* f,Exiv2::DataBuf& buf)
+{
+    const int buff_size = 4*1028;
+    Exiv2::byte* bytes  = (Exiv2::byte*)::malloc(buff_size);
+    int       nBytes    = 0 ;
+    bool      more      = bytes != NULL;
+    while   ( more ) {
+        char buff[buff_size];
+        int  n     = (int) fread(buff,1,buff_size,f);
+        more       = n > 0 ;
+        if ( more ) {
+            bytes      = (Exiv2::byte*) realloc(bytes,nBytes+n);
+            memcpy(bytes+nBytes,buff,n);
+            nBytes    += n ;
+        }
+    }
+
+    if ( nBytes ) {
+        buf.alloc(nBytes);
+        memcpy(buf.pData_,(const void*)bytes,nBytes);
+    }
+    if ( bytes != NULL ) ::free(bytes) ;
+    return nBytes;
+}
+
+void Params::getStdin(Exiv2::DataBuf& buf)
+{
+    // copy stdin to stdinBuf
+    if ( stdinBuf.size_ == 0 ) {
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW__) || defined(_MSC_VER)
+        DWORD fdwMode;
+        _setmode(fileno(stdin), O_BINARY);
+        Sleep(300);
+        if ( !GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &fdwMode) ) { // failed: stdin has bytes!
+#else
+        // http://stackoverflow.com/questions/34479795/make-c-not-wait-for-user-input/34479916#34479916
+        fd_set                readfds;
+        FD_ZERO             (&readfds);
+        FD_SET(STDIN_FILENO, &readfds);
+        struct timeval timeout =  {1,0}; // yes: set timeout seconds,microseconds
+
+        // if we have something in the pipe, read it
+        if (select(1, &readfds, NULL, NULL, &timeout)) {
+#endif
+#ifdef DEBUG
+            std::cerr << "stdin has data" << std::endl;
+#endif
+            readFileToBuf(stdin,stdinBuf);
+        }
+#ifdef DEBUG
+        // this is only used to simulate reading from stdin when debugging
+        // to simulate exiv2 -pX foo.jpg                | exiv2 -iXX- bar.jpg
+        //             exiv2 -pX foo.jpg > ~/temp/stdin ; exiv2 -iXX- bar.jpg
+        if ( stdinBuf.size_ == 0 ) {
+            const char* path = "/Users/rmills/temp/stdin";
+            FILE* f = fopen(path,"rb");
+            if  ( f ) {
+                readFileToBuf(f,stdinBuf);
+                fclose(f);
+                std::cerr << "read stdin from " << path << std::endl;
+            }
+        }
+#endif
+#ifdef DEBUG
+            std::cerr << "getStdin stdinBuf.size_ = " << stdinBuf.size_ << std::endl;
+#endif
+    }
+
+    // copy stdinBuf to buf
+    if ( stdinBuf.size_ ) {
+        buf.alloc(stdinBuf.size_);
+        memcpy(buf.pData_,stdinBuf.pData_,buf.size_);
+    }
+#ifdef DEBUG
+    std::cerr << "getStdin stdinBuf.size_ = " << stdinBuf.size_ << std::endl;
+#endif
+
+} // Params::getStdin()
+
 typedef std::map<std::string,std::string> long_t;
 
 int Params::getopt(int argc, char* const Argv[])
@@ -1049,6 +1128,8 @@ namespace {
     {
         int rc     = 0;
         int target = 0;
+        int all    = Params::ctExif | Params::ctIptc | Params::ctComment | Params::ctXmp;
+        int extra  = Params::ctXmpSidecar|Params::ctExif|Params::ctIptc|Params::ctXmp;
         for (size_t i = 0; rc == 0 && i < optarg.size(); ++i) {
             switch (optarg[i]) {
             case 'e': target |= Params::ctExif; break;
@@ -1059,21 +1140,12 @@ namespace {
             case 'C': target |= Params::ctIccProfile; break;
             case 'I': target |= Params::ctIptcRaw;break;
             case '-': target |= Params::ctStdInOut;break;
-            case 'a': target |=   Params::ctExif
-                                | Params::ctIptc
-                                | Params::ctComment
-                                | Params::ctXmp; break;
-            case 'X':
-                Params::printTarget("X before",target);
-                target |= Params::ctXmpSidecar|Params::ctExif  |  Params::ctIptc | Params::ctXmp ; // -eX
-                Params::printTarget("X after1",target);
-
-                if ( i ) { // -eXX
-                    target |= Params::ctXmpRaw ;
-                    Params::printTarget("X after2",target);
-                    target ^= Params::ctExif|Params::ctIptc|Params::ctXmp ; // turn off those bits
-                }
-                Params::printTarget("X ending",target,false);
+            case 'a': target |= all ; break;
+            case 'X': target |= extra ; // -eX
+                 if ( i > 0 ) { // -eXX or -iXX
+                    target |=  Params::ctXmpRaw ;
+                    target &= ~extra; // turn off those bits
+                 }
             break;
 
             case 'p':
diff --git a/src/exiv2app.hpp b/src/exiv2app.hpp
index 657cce7..02a008b 100644
--- a/src/exiv2app.hpp
+++ b/src/exiv2app.hpp
@@ -353,53 +353,7 @@ public:
         stdin can be used by multiple images in the exiv2 command line:
         For example: $ cat foo.icc | exiv2 -iC- a.jpg b.jpg c.jpg will modify the ICC profile in several images.
     */
-    void getStdin(Exiv2::DataBuf& buf)
-    {
-        // copy stdin to stdinBuf
-        if ( stdinBuf.size_ == 0 ) {
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW__) || defined(_MSC_VER)
-            DWORD fdwMode;
-            _setmode(fileno(stdin), O_BINARY);
-            if ( !GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &fdwMode) ) { // failed: stdin has bytes!
-#else
-            // http://stackoverflow.com/questions/34479795/make-c-not-wait-for-user-input/34479916#34479916
-            fd_set                readfds;
-            FD_ZERO             (&readfds);
-            FD_SET(STDIN_FILENO, &readfds);
-            struct timeval timeout = { 0,0 };
-
-            // if we have something in the pipe, read it
-            if (select(1, &readfds, NULL, NULL, &timeout)) {
-#endif
-                const int buff_size = 4*1028;
-                Exiv2::byte* bytes  = (Exiv2::byte*)::malloc(buff_size);
-                int       nBytes    = 0 ;
-                bool      more      = bytes != NULL;
-                while   ( more ) {
-                    char buff[buff_size];
-                    int  n     = (int) fread(buff,1,buff_size,stdin);
-                    more       = n > 0 ;
-                    if ( more ) {
-                        bytes      = (Exiv2::byte*) realloc(bytes,nBytes+n);
-                        memcpy(bytes+nBytes,buff,n);
-                        nBytes    += n ;
-                    }
-                }
-
-                if ( nBytes ) {
-                    stdinBuf.alloc(nBytes);
-                    memcpy(stdinBuf.pData_,(const void*)bytes,nBytes);
-                }
-                if ( bytes != NULL ) ::free(bytes) ;
-            }
-        }
-
-        // copy stdinBuf to buf
-        if ( stdinBuf.size_ ) {
-            buf.alloc(stdinBuf.size_);
-            memcpy(buf.pData_,stdinBuf.pData_,buf.size_);
-        }
-    };
+    void getStdin(Exiv2::DataBuf& buf);
 
 }; // class Params
 
diff --git a/src/image.cpp b/src/image.cpp
index 6a8bc52..68e3278 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -249,7 +249,10 @@ namespace Exiv2 {
     void Image::setXmpPacket(const std::string& xmpPacket)
     {
         xmpPacket_ = xmpPacket;
-        writeXmpFromPacket(true);
+        if ( XmpParser::decode(xmpData_, xmpPacket) ) {
+            throw Error(54);
+        }
+        xmpPacket_ = xmpPacket;
     }
 
     void Image::clearXmpData()
diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp
index 4c1d0ad..7059aae 100644
--- a/src/jpgimage.cpp
+++ b/src/jpgimage.cpp
@@ -901,6 +901,7 @@ namespace Exiv2 {
         int skipCom = -1;
         Blob psBlob;
         DataBuf rawExif;
+        xmpData().usePacket(writeXmpFromPacket());
 
         // Write image header
         if (writeHeader(outIo)) throw Error(21);
diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp
index d442444..f0eb1f1 100644
--- a/src/tiffimage.cpp
+++ b/src/tiffimage.cpp
@@ -229,14 +229,17 @@ namespace Exiv2 {
         Exiv2::ExifKey            key("Exif.Image.InterColorProfile");
         Exiv2::ExifData::iterator pos   = exifData_.findKey(key);
         bool                      found = pos != exifData_.end();
-        if ( iccProfile_.size_ > 0 ) {
-            Exiv2::DataValue      value(iccProfile_.pData_,iccProfile_.size_);
-            if ( found )      pos->setValue(&value);
-            else         exifData_.add(key,&value);
+        if ( iccProfileDefined() ) {
+            Exiv2::DataValue value(iccProfile_.pData_,iccProfile_.size_);
+            if ( found ) pos->setValue(&value);
+            else     exifData_.add(key,&value);
         } else {
             if ( found ) exifData_.erase(pos);
         }
 
+        // set usePacket to influence TiffEncoder::encodeXmp() called by TiffVisitor.encode()
+        xmpData().usePacket(writeXmpFromPacket());
+
         TiffParser::encode(*io_, pData, size, bo, exifData_, iptcData_, xmpData_); // may throw
     } // TiffImage::writeMetadata
 
diff --git a/src/tiffvisitor.cpp b/src/tiffvisitor.cpp
index 14c61d2..a771489 100644
--- a/src/tiffvisitor.cpp
+++ b/src/tiffvisitor.cpp
@@ -618,10 +618,14 @@ namespace Exiv2 {
             exifData_.erase(pos);
         }
         std::string xmpPacket;
-        if (XmpParser::encode(xmpPacket, xmpData_) > 1) {
+        if ( xmpData_.usePacket() ) {
+        	xmpPacket = xmpData_.xmpPacket();
+        } else {
+            if (XmpParser::encode(xmpPacket, xmpData_) > 1) {
 #ifndef SUPPRESS_WARNINGS
-            EXV_ERROR << "Failed to encode XMP metadata.
";
+                EXV_ERROR << "Failed to encode XMP metadata.
";
 #endif
+            }
         }
         if (!xmpPacket.empty()) {
             // Set the XMP Exif tag to the new value
diff --git a/src/xmp.cpp b/src/xmp.cpp
index 1a3e637..d967d96 100644
--- a/src/xmp.cpp
+++ b/src/xmp.cpp
@@ -540,6 +540,7 @@ namespace Exiv2 {
                           const std::string& xmpPacket)
     { try {
         xmpData.clear();
+        xmpData.setPacket(xmpPacket);
         if (xmpPacket.empty()) return 0;
 
         if (!initialize()) {
diff --git a/test/Makefile b/test/Makefile
index 1434a77..2dff2e4 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -75,6 +75,7 @@ TESTS  = addmoddel.sh         \
          modify-test.sh       \
          path-test.sh         \
          preview-test.sh      \
+         stdin-test.sh        \
          stringto-test.sh     \
          tiff-test.sh         \
          webp-test.sh         \
diff --git a/test/data/stdin-test.out b/test/data/stdin-test.out
new file mode 100644
index 0000000..af0085e
--- /dev/null
+++ b/test/data/stdin-test.out
@@ -0,0 +1,107 @@
+STRUCTURE OF JPEG FILE: girl.jpg
+ address | marker       |  length | data
+       0 | 0xffd8 SOI  
+       2 | 0xffe0 APP0  |      16 | JFIF............
+      20 | 0xffdb DQT   |      67 
+      89 | 0xffdb DQT   |      67 
+     158 | 0xffc0 SOF0  |      17 
+     177 | 0xffc4 DHT   |      28 
+     207 | 0xffc4 DHT   |      74 
+     283 | 0xffc4 DHT   |      28 
+     313 | 0xffc4 DHT   |      57 
+     372 | 0xffe1 APP1  |    4613 | http://ns.adobe.com/xap/1.0/.<?x
+    4987 | 0xffe1 APP1  |    4602 | http://ns.adobe.com/xap/1.0/.<?x
+    9591 | 0xffda SOS  
+STRUCTURE OF JPEG FILE: girl.jpg
+ address | marker       |  length | data
+       0 | 0xffd8 SOI  
+       2 | 0xffe0 APP0  |      16 | JFIF............
+      20 | 0xffdb DQT   |      67 
+      89 | 0xffdb DQT   |      67 
+     158 | 0xffc0 SOF0  |      17 
+     177 | 0xffc4 DHT   |      28 
+     207 | 0xffc4 DHT   |      74 
+     283 | 0xffc4 DHT   |      28 
+     313 | 0xffc4 DHT   |      57 
+     372 | 0xffe1 APP1  |    4602 | http://ns.adobe.com/xap/1.0/.<?x
+    4976 | 0xffda SOS  
+STRUCTURE OF JPEG FILE: girl.jpg
+ address | marker       |  length | data
+       0 | 0xffd8 SOI  
+       2 | 0xffe0 APP0  |      16 | JFIF............
+      20 | 0xffe1 APP1  |    4613 | http://ns.adobe.com/xap/1.0/.<?x
+    4635 | 0xffdb DQT   |      67 
+    4704 | 0xffdb DQT   |      67 
+    4773 | 0xffc0 SOF0  |      17 
+    4792 | 0xffc4 DHT   |      28 
+    4822 | 0xffc4 DHT   |      74 
+    4898 | 0xffc4 DHT   |      28 
+    4928 | 0xffc4 DHT   |      57 
+    4987 | 0xffda SOS  
+STRUCTURE OF JPEG FILE: girl.jpg
+ address | marker       |  length | data
+       0 | 0xffd8 SOI  
+       2 | 0xffe0 APP0  |      16 | JFIF............
+      20 | 0xffdb DQT   |      67 
+      89 | 0xffdb DQT   |      67 
+     158 | 0xffc0 SOF0  |      17 
+     177 | 0xffc4 DHT   |      28 
+     207 | 0xffc4 DHT   |      74 
+     283 | 0xffc4 DHT   |      28 
+     313 | 0xffc4 DHT   |      57 
+     372 | 0xffda SOS  
+STRUCTURE OF JPEG FILE: girl.jpg
+ address | marker       |  length | data
+       0 | 0xffd8 SOI  
+       2 | 0xffe0 APP0  |      16 | JFIF............
+      20 | 0xffe1 APP1  |    4613 | http://ns.adobe.com/xap/1.0/.<?x
+    4635 | 0xffdb DQT   |      67 
+    4704 | 0xffdb DQT   |      67 
+    4773 | 0xffc0 SOF0  |      17 
+    4792 | 0xffc4 DHT   |      28 
+    4822 | 0xffc4 DHT   |      74 
+    4898 | 0xffc4 DHT   |      28 
+    4928 | 0xffc4 DHT   |      57 
+    4987 | 0xffda SOS  
+<?xml version="1.0"?>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="uuid:e61b1e9d-b8e4-6a17-a443-74b51849baaf">
+      <dc:subject>
+        <rdf:Bag>
+          <rdf:li>Celebs: JEnna Marbles</rdf:li>
+        </rdf:Bag>
+      </dc:subject>
+    </rdf:Description>
+  </rdf:RDF>
+</x:xmpmeta>
+<?xpacket end='w'?>
+<?xml version="1.0"?>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="uuid:e61b1e9d-b8e4-6a17-a443-74b51849baaf">
+      <dc:subject>
+        <rdf:Bag>
+          <rdf:li>Celebs: JEnna Marbles</rdf:li>
+        </rdf:Bag>
+      </dc:subject>
+    </rdf:Description>
+  </rdf:RDF>
+</x:xmpmeta>
+<?xpacket end='w'?>
+<?xml version="1.0"?>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="uuid:e61b1e9d-b8e4-6a17-a443-74b51849baaf">
+      <dc:subject>
+        <rdf:Bag>
+          <rdf:li>Celebs: JEnna Marbles</rdf:li>
+        </rdf:Bag>
+      </dc:subject>
+    </rdf:Description>
+  </rdf:RDF>
+</x:xmpmeta>
+<?xpacket end='w'?>
diff --git a/test/data/webp-test.out b/test/data/webp-test.out
index 28e3f6f..1ae9fc4 100644
--- a/test/data/webp-test.out
+++ b/test/data/webp-test.out
@@ -296,12 +296,12 @@ STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
   XMP  |     2864 |   184662 | <?xpacket begin="..." id="W5M0Mp
 STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
  Chunk |   Length |   Offset | Payload
-  RIFF |   189580 |        0 | WEBP
+  RIFF |   189324 |        0 | WEBP
   VP8X |       10 |       12 | ,........
   ICCP |      560 |       30 | ...0ADBE....mntrRGB XYZ ........
   VP8  |   172008 |      598 | .G...*.. .>1..B.!..o.. ......]..
   EXIF |    12040 |   172614 | II*........................... .
-  XMP  |     4917 |   184662 | <?xpacket begin="..." id="W5M0Mp
+  XMP  |     4661 |   184662 | <?xpacket begin="..." id="W5M0Mp
 STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
  Chunk |   Length |   Offset | Payload
   RIFF |   187526 |        0 | WEBP
@@ -320,12 +320,12 @@ STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
   XMP  |     3407 |   184662 | <?xpacket begin="..." id="W5M0Mp
 STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
  Chunk |   Length |   Offset | Payload
-  RIFF |  1862068 |        0 | WEBP
+  RIFF |  1864146 |        0 | WEBP
   VP8X |       10 |       12 | ,........
   ICCP |      560 |       30 | ...0ADBE....mntrRGB XYZ ........
   VP8  |   172008 |      598 | .G...*.. .>1..B.!..o.. ......]..
   EXIF |    12040 |   172614 | II*........................... .
-  XMP  |  1677405 |   184662 | <x:xmpmeta xmlns:x="adobe:ns:met
+  XMP  |  1679484 |   184662 | <?xpacket begin="..." id="W5M0Mp
 STRUCTURE OF WEBP FILE: exiv2-bug1199.webp
  Chunk |   Length |   Offset | Payload
   RIFF |   187526 |        0 | WEBP
diff --git a/test/stdin-test.sh b/test/stdin-test.sh
new file mode 100755
index 0000000..05d77e2
--- /dev/null
+++ b/test/stdin-test.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# Test driver for stdin
+
+source ./functions.source
+
+(   cd "$testdir"
+
+    printf "stdin XMP " >&3
+    copyTestFile      exiv2-bug1229.jpg # jpg with 2 APP1/xap segments
+
+    copyTestFile      exiv2-bug1229.jpg girl.jpg
+    runTest exiv2 -pS girl.jpg
+    runTest exiv2 -dX girl.jpg   # remove first
+    runTest exiv2 -pS girl.jpg
+    runTest exiv2 -pX exiv2-bug1229.jpg | runTest exiv2 -iXX- girl.jpg
+    runTest exiv2 -pS girl.jpg
+
+    copyTestFile   exiv2-bug1229.jpg girl.jpg
+    runTest exiv2 -dX girl.jpg
+    runTest exiv2 -dX girl.jpg
+    runTest exiv2 -pS girl.jpg
+    runTest exiv2 -pX exiv2-bug1229.jpg | runTest exiv2 -iXX- girl.jpg
+    runTest exiv2 -pS girl.jpg
+
+    for f in Reagan.tiff Reagan.tiff ReaganSmallPng.png; do
+        copyTestFile   $f
+        runTest exiv2 -pX exiv2-bug1229.jpg | runTest exiv2 -iXX- $f
+        exiv2 -pX $f | xmllint --format -
+    done
+
+) 3>&1 > $results 2>&1
+
+printf "
"
+
+# ----------------------------------------------------------------------
+# Evaluate results
+cat $results | tr -d $'
' > $results-stripped
+mv                           $results-stripped $results
+reportTest                                     $results $good
+
+# That's all Folks!
+##

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list