]> granicus.if.org Git - imagemagick/commitdiff
Use signed arithmetic to adjust timezone offsets for PNG tIME chunk.
authorGlenn Randers-Pehrson <glennrp@gmail.com>
Tue, 12 Sep 2017 00:15:22 +0000 (20:15 -0400)
committerGlenn Randers-Pehrson <glennrp@gmail.com>
Tue, 12 Sep 2017 00:15:22 +0000 (20:15 -0400)
ChangeLog
coders/png.c

index 51b58f0cdc1521b401c78e533397c5ab8eec135d..17edbb727b589477babffc1211d02e09e71859ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2017-09-11  7.0.7-2 Glenn Randers-Pehrson <glennrp@image...>
+  * Use signed integer arithmetic to caluculate timezone corrections (reference
+    https://github.com/ImageMagick/ImageMagick/issues/685).
+
 2017-09-09  7.0.7-1 Cristy  <quetzlzacatenango@image...>
   * Release ImageMagick version 7.0.7-1, GIT revision 21065:ab2194121:20170909.
 
index ab8e214303607b5dd607d461cff8a7507e5e606e..501fc58a2a28ab10fd137125f523646e3782b205 100644 (file)
@@ -8136,7 +8136,7 @@ static void write_tIME_chunk(Image *image,png_struct *ping,png_info *info,
   int
     ret;
 
-  unsigned int
+  int
     day,
     hour,
     minute,
@@ -8178,66 +8178,67 @@ static void write_tIME_chunk(Image *image,png_struct *ping,png_info *info,
       image->filename,ret);
     return;
   }
-  ptime.year=(png_uint_16) year;
-  ptime.month=(png_byte) month;
-  ptime.day=(png_byte) day;
   if (addhours < 0)
   {
     addhours+=24;
-    ptime.hour=(png_byte) hour+addhours;
-    ptime.day--;
-    if (ptime.day == 0)
+    hour+=addhours;
+    day--;
+    if (day == 0)
     {
-      ptime.month--;
-      if(ptime.month == 2)
-        ptime.day=28;
+      month--;
+      if(month == 2)
+        day=28;
       else
       {
-        if(ptime.month == 4 || ptime.month == 6 || ptime.month == 9 ||
-           ptime.month == 11)
-          ptime.day=30;
+        if(month == 4 || month == 6 || month == 9 || month == 11)
+          day=30;
         else
-          ptime.day=31;
+          day=31;
       }
     }
-    if (ptime.month == 0)
+    if (month == 0)
     {
-      ptime.month++;
-      ptime.year--;
+      month++;
+      year--;
     }
   }
-  ptime.hour=(png_byte) hour+addhours;
-  ptime.minute=(png_byte) minute+addminutes;
-  ptime.second=(png_byte) second;
-  if (ptime.minute > 60)
+  hour+=addhours;
+  minute+=addminutes;
+  if (minute > 60)
   {
-     ptime.hour++;
-     ptime.minute-=60;
+     hour++;
+     minute-=60;
   }
-  if (ptime.hour > 24)
+  if (hour > 24)
   {
-     ptime.day ++;
-     ptime.hour -=24;
+     day ++;
+     hour -=24;
   }
-  if (ptime.hour < 0)
+  if (hour < 0)
   {
-     ptime.day --;
-     ptime.hour +=24;
+     day --;
+     hour +=24;
   }
   /* To do: fix this for leap years */
-  if (ptime.day > 31 || (ptime.month == 2 && ptime.day > 28) ||
-      ((ptime.month == 4 || ptime.month == 6 || ptime.month == 9 ||
-      ptime.month == 11) && ptime.day > 30))
+  if (day > 31 || (month == 2 && day > 28) || ((month == 4 || month == 6 ||
+      month == 9 || month == 11) && day > 30))
   {
-     ptime.month++;
-     ptime.day = 1;
+     month++;
+     day = 1;
   }
-  if (ptime.month > 12)
+  if (month > 12)
   {
-     ptime.year++;
-     ptime.month=1;
+     year++;
+     month=1;
   }
 
+  ptime.year = year;
+  ptime.month = month;
+  ptime.day = day;
+  ptime.hour = hour;
+  ptime.minute = minute;
+  ptime.second = second;
+
   LogMagickEvent(CoderEvent,GetMagickModule(),
       "      png_set_tIME: y=%d, m=%d, d=%d, h=%d, m=%d, s=%d, ah=%d, am=%d",
       ptime.year, ptime.month, ptime.day, ptime.hour, ptime.minute,