agent: Avoid appending a '\0' byte to the response of READKEY
[gnupg.git] / common / gettime.c
index 9702bbc..4ad99f5 100644 (file)
@@ -24,7 +24,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -133,7 +133,7 @@ gnupg_set_time (time_t newtime, int freeze)
   else if (freeze)
     {
       timemode = FROZEN;
-      timewarp = current;
+      timewarp = newtime == (time_t)-1 ? current : newtime;
     }
   else if (newtime > current)
     {
@@ -222,6 +222,8 @@ isotime_p (const char *string)
   for (s++, i=9; i < 15; i++, s++)
     if (!digitp (s))
       return 0;
+  if (*s == 'Z')
+    s++;
   if ( !(!*s || (isascii (*s) && isspace(*s)) || *s == ':' || *s == ','))
     return 0;  /* Wrong delimiter.  */
 
@@ -354,9 +356,10 @@ string2isotime (gnupg_isotime_t atime, const char *string)
 }
 
 
-/* Scan an ISO timestamp and return an Epoch based timestamp.  The only
-   supported format is "yyyymmddThhmmss" delimited by white space, nul, a
-   colon or a comma.  Returns (time_t)(-1) for an invalid string.  */
+/* Scan an ISO timestamp and return an Epoch based timestamp.  The
+   only supported format is "yyyymmddThhmmss[Z]" delimited by white
+   space, nul, a colon or a comma.  Returns (time_t)(-1) for an
+   invalid string.  */
 time_t
 isotime2epoch (const char *string)
 {
@@ -740,10 +743,10 @@ rfctimestamp (u32 stamp)
   if (!tp)
     return NULL;
   return xtryasprintf ("%.3s, %02d %.3s %04d %02d:%02d:%02d +0000",
-                       ("SunMonTueWedThuFriSat" + (tp->tm_wday%7)*3),
+                       &"SunMonTueWedThuFriSat"[(tp->tm_wday%7)*3],
                        tp->tm_mday,
-                       ("JanFebMarAprMayJunJulAugSepOctNovDec"
-                        + (tp->tm_mon%12)*3),
+                       &"JanFebMarAprMayJunJulAugSepOctNovDec"
+                       [(tp->tm_mon%12)*3],
                        tp->tm_year + 1900,
                        tp->tm_hour,
                        tp->tm_min,