]> granicus.if.org Git - imagemagick/commitdiff
Put UTC time in the PNG tIME chunk instead of local time (reference
authorGlenn Randers-Pehrson <glennrp@gmail.com>
Fri, 4 Aug 2017 02:10:55 +0000 (22:10 -0400)
committerGlenn Randers-Pehrson <glennrp@gmail.com>
Fri, 4 Aug 2017 02:10:55 +0000 (22:10 -0400)
https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=32447).

ChangeLog
coders/png.c

index 3566e7ea1afbc271929d9d9e9642acabe9fcc002..8e333b2b2bb4e9b0003e08a85928ef273b61023c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2017-08-03  7.0.6-6 Glenn Randers-Pehrson <glennrp@image...>
+  * Put UTC time in the PNG tIME chunk instead of local time (reference
+    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=32447).
+
 2017-08-02  7.0.6-5 Cristy  <quetzlzacatenango@image...>
   * Release ImageMagick version 7.0.6-5, GIT revision 20715:26b28d50a:20170802.
 
index f9bea7f4cb821328a2084054e95aff154adb77c2..ece03b1914d578534e200c431a2e187180c83e86 100644 (file)
@@ -8148,37 +8148,51 @@ static void write_tIME_chunk(Image *image,png_struct *ping,png_info *info,
     minute,
     month,
     second,
-    year;
+    year,
+    addhours=0,
+    addminutes=0;
 
   png_time
     ptime;
 
-  time_t
-    ttime;
-
-  if (date != (const char *) NULL)
+  if (date == (const char *) NULL)
     {
-      if (sscanf(date,"%d-%d-%dT%d:%d:%dZ",&year,&month,&day,&hour,&minute,
-          &second) != 6)
-        {
+      const char
+        *timestamp;
+
+      timestamp=GetImageProperty(image,"date:modify",exception);
+      if (sscanf(timestamp,"%d-%d-%dT%d:%d:%d%d:%d",&year,&month,&day,&hour,
+          &minute, &second, &addhours, &addminutes) != 8)
+      {
           (void) ThrowMagickException(exception,GetMagickModule(),CoderError,
             "Invalid date format specified for png:tIME","`%s'",
             image->filename);
           return;
-        }
-      ptime.year=(png_uint_16) year;
-      ptime.month=(png_byte) month;
-      ptime.day=(png_byte) day;
-      ptime.hour=(png_byte) hour;
-      ptime.minute=(png_byte) minute;
-      ptime.second=(png_byte) second;
+      }
     }
   else
-  {
-    time(&ttime);
-    png_convert_from_time_t(&ptime,ttime);
-  }
-  png_set_tIME(ping,info,&ptime);
+    {
+      if (sscanf(date,"%d-%d-%dT%d:%d:%d%d:%d",&year,&month,&day,&hour,
+          &minute, &second, &addhours, &addminutes) != 8)
+      {
+          (void) ThrowMagickException(exception,GetMagickModule(),CoderError,
+            "Invalid date format specified for png:tIME","`%s'",
+            image->filename);
+          return;
+      }
+    }
+   ptime.year=(png_uint_16) year;
+   ptime.month=(png_byte) month;
+   ptime.day=(png_byte) day;
+   ptime.hour=(png_byte) hour+addhours;
+   ptime.minute=(png_byte) minute+addminutes;
+   if (ptime.minute > 60)
+   {
+      ptime.hour++;
+      ptime.minute=+60;
+   }
+   ptime.second=(png_byte) second;
+   png_set_tIME(ping,info,&ptime);
 }
 #endif