Browse Source

Provided safer casting to time_t

master
Artyom Beilis 12 years ago
parent
commit
7dbd95fb08
4 changed files with 21 additions and 4 deletions
  1. +17
    -0
      private/tcp_cache_protocol.h
  2. +1
    -1
      src/session_tcp_storage.cpp
  3. +1
    -1
      src/tcp_cache_client.cpp
  4. +2
    -2
      src/tcp_cache_server.cpp

+ 17
- 0
private/tcp_cache_protocol.h View File

@@ -9,6 +9,8 @@
#define TCP_CACHE_PROTO_H

#include <cppcms/cstdint.h>
#include <time.h>
#include <limits>

namespace cppcms {
namespace impl {
@@ -68,6 +70,21 @@ namespace impl {
} operations;
};

inline time_t to_time_t(int64_t v)
{
if(sizeof(time_t) < sizeof(v)) {
if(v > static_cast<int64_t>(std::numeric_limits<time_t>::max())) {
return std::numeric_limits<time_t>::max();
}
else {
return static_cast<time_t>(v);
}
}
else {
return static_cast<time_t>(v);
}
}

} // namespace impl
} // Namespace cppcms



+ 1
- 1
src/session_tcp_storage.cpp View File

@@ -49,7 +49,7 @@ bool tcp_storage::load(std::string const &sid,time_t &timeout,std::string &out)
std::string data=sid;
tcp().get(sid).transmit(h,data);
if(h.opcode==opcodes::session_load_data) {
timeout = h.operations.session_data.timeout;
timeout = to_time_t(h.operations.session_data.timeout);
out.swap(data);
return true;
}


+ 1
- 1
src/tcp_cache_client.cpp View File

@@ -67,7 +67,7 @@ int tcp_cache::fetch( std::string const &key,
if(h.opcode!=opcodes::data)
return not_found;

timeout = h.operations.data.timeout;
timeout = to_time_t(h.operations.data.timeout);
generation=h.operations.data.generation;



+ 2
- 2
src/tcp_cache_server.cpp View File

@@ -183,7 +183,7 @@ public:
hout_.opcode=opcodes::error;
return;
}
time_t timeout=hin_.operations.store.timeout;
time_t timeout=to_time_t(hin_.operations.store.timeout);
std::string key;
key.assign(data_in_.begin(),data_in_.begin()+hin_.operations.store.key_len);
std::string data;
@@ -199,7 +199,7 @@ public:
hout_.opcode=opcodes::error;
return;
}
time_t timeout=hin_.operations.session_save.timeout;
time_t timeout=to_time_t(hin_.operations.session_save.timeout);
std::string sid(data_in_.begin(),data_in_.begin()+32);
std::string value(data_in_.begin()+32,data_in_.end());
sessions_->save(sid,timeout,value);


Loading…
Cancel
Save