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 #define TCP_CACHE_PROTO_H


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


namespace cppcms { namespace cppcms {
namespace impl { namespace impl {
@@ -68,6 +70,21 @@ namespace impl {
} operations; } 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 impl
} // Namespace cppcms } // 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; std::string data=sid;
tcp().get(sid).transmit(h,data); tcp().get(sid).transmit(h,data);
if(h.opcode==opcodes::session_load_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); out.swap(data);
return true; 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) if(h.opcode!=opcodes::data)
return not_found; return not_found;


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




+ 2
- 2
src/tcp_cache_server.cpp View File

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


Loading…
Cancel
Save