2a0430a
From 53d2ea9ad3cc20e1beac2e1c014082c25e221182 Mon Sep 17 00:00:00 2001
2a0430a
From: Takatoshi Kondo <redboltz@gmail.com>
2a0430a
Date: Sun, 26 Aug 2018 10:58:47 +0900
2a0430a
Subject: [PATCH] Fixed #724.
2a0430a
2a0430a
Fixed type mismatch in msgpack_timestamp.
2a0430a
Added 64bit singed postfix.
2a0430a
---
2a0430a
 include/msgpack/timestamp.h                 | 8 ++++++--
2a0430a
 include/msgpack/v1/adaptor/cpp11/chrono.hpp | 4 ++--
2a0430a
 2 files changed, 8 insertions(+), 4 deletions(-)
2a0430a
2a0430a
diff --git a/include/msgpack/timestamp.h b/include/msgpack/timestamp.h
2a0430a
index 4d7df83d..76139312 100644
2a0430a
--- a/include/msgpack/timestamp.h
2a0430a
+++ b/include/msgpack/timestamp.h
2a0430a
@@ -28,13 +28,17 @@ static inline bool msgpack_object_to_timestamp(const msgpack_object* obj, msgpac
2a0430a
     switch (obj->via.ext.size) {
2a0430a
     case 4:
2a0430a
         ts->tv_nsec = 0;
2a0430a
-        _msgpack_load32(uint32_t, obj->via.ext.ptr, &ts->tv_sec);
2a0430a
+        {
2a0430a
+            uint32_t v;
2a0430a
+            _msgpack_load32(uint32_t, obj->via.ext.ptr, &v);
2a0430a
+            ts->tv_sec = v;
2a0430a
+        }
2a0430a
         return true;
2a0430a
     case 8: {
2a0430a
         uint64_t value;
2a0430a
         _msgpack_load64(uint64_t, obj->via.ext.ptr, &value);
2a0430a
         ts->tv_nsec = (uint32_t)(value >> 34);
2a0430a
-        ts->tv_sec = value & 0x00000003ffffffffL;
2a0430a
+        ts->tv_sec = value & 0x00000003ffffffffLL;
2a0430a
         return true;
2a0430a
     }
2a0430a
     case 12:
2a0430a
diff --git a/include/msgpack/v1/adaptor/cpp11/chrono.hpp b/include/msgpack/v1/adaptor/cpp11/chrono.hpp
2a0430a
index 1e08355e..db2035b7 100644
2a0430a
--- a/include/msgpack/v1/adaptor/cpp11/chrono.hpp
2a0430a
+++ b/include/msgpack/v1/adaptor/cpp11/chrono.hpp
2a0430a
@@ -41,7 +41,7 @@ struct as<std::chrono::system_clock::time_point> {
2a0430a
             uint64_t value;
2a0430a
             _msgpack_load64(uint64_t, o.via.ext.data(), &value);
2a0430a
             uint32_t nanosec = static_cast<uint32_t>(value >> 34);
2a0430a
-            uint64_t sec = value & 0x00000003ffffffffL;
2a0430a
+            uint64_t sec = value & 0x00000003ffffffffLL;
2a0430a
             tp += std::chrono::duration_cast<std::chrono::system_clock::duration>(
2a0430a
                 std::chrono::nanoseconds(nanosec));
2a0430a
             tp += std::chrono::seconds(sec);
2a0430a
@@ -79,7 +79,7 @@ struct convert<std::chrono::system_clock::time_point> {
2a0430a
             uint64_t value;
2a0430a
             _msgpack_load64(uint64_t, o.via.ext.data(), &value);
2a0430a
             uint32_t nanosec = static_cast<uint32_t>(value >> 34);
2a0430a
-            uint64_t sec = value & 0x00000003ffffffffL;
2a0430a
+            uint64_t sec = value & 0x00000003ffffffffLL;
2a0430a
             tp += std::chrono::duration_cast<std::chrono::system_clock::duration>(
2a0430a
                 std::chrono::nanoseconds(nanosec));
2a0430a
             tp += std::chrono::seconds(sec);
2a0430a
-- 
2a0430a
2.17.1
2a0430a