@@ -287,7 +287,9 @@ bool HTTPClient::invokeGetRequest(const std::string& uri, Buffer& data, const do
287287 if (buffer.size () > responseHeader.length ())
288288 {
289289 if (appendData (responseHeader, responseBuffer, responseBufferPosition, (char *)buffer.data () + responseHeader.length (), buffer.size () - responseHeader.length (), responsePendingChunkSize))
290+ {
290291 break ;
292+ }
291293 }
292294
293295 startTimestamp.toNow ();
@@ -301,7 +303,7 @@ bool HTTPClient::invokeGetRequest(const std::string& uri, Buffer& data, const do
301303
302304 Thread::sleep (1 );
303305 }
304- while (startTimestamp + timeout > Timestamp ( true ));
306+ while (! startTimestamp. hasTimePassed (timeout ));
305307
306308 if (responseHeader.encodingType () == HTTPHeader::ET_GZIP)
307309 {
@@ -506,7 +508,9 @@ bool HTTPClient::appendData(const HTTPHeader& header, Buffer& buffer, size_t& bu
506508 ocean_assert (header.transferEncodingChunked () || pendingChunkSize == 0 );
507509
508510 if (buffer.empty () && header.contentLength () != 0 )
511+ {
509512 buffer.resize (header.contentLength ());
513+ }
510514
511515 size_t iterationSize = 0 ;
512516
@@ -518,7 +522,7 @@ bool HTTPClient::appendData(const HTTPHeader& header, Buffer& buffer, size_t& bu
518522 size_t offset = 0 ;
519523 const std::string chungSizeLine = line ((const char *)payload, payloadSize, offset);
520524
521- unsigned int chunkSize = 0u ;
525+ uint32_t chunkSize = 0u ;
522526 if (!hexToNumber (chungSizeLine, chunkSize))
523527 {
524528 return false ;
@@ -608,7 +612,7 @@ std::string HTTPClient::line(const char* data, const size_t size, size_t& offset
608612 return std::string (data, size);
609613}
610614
611- bool HTTPClient::hexToNumber (const std::string& hex, unsigned int & value)
615+ bool HTTPClient::hexToNumber (const std::string& hex, uint32_t & value)
612616{
613617 value = 0u ;
614618
@@ -639,8 +643,14 @@ bool HTTPClient::hexToNumber(const std::string& hex, unsigned int& value)
639643 return false ;
640644 }
641645
642- ocean_assert (value <= value + (digit << (n * 4u )));
643- value += (digit << (n * 4u ));
646+ const uint32_t digitValue = digit << (n * 4u );
647+
648+ if (digitValue > std::numeric_limits<uint32_t >::max () - value)
649+ {
650+ return false ;
651+ }
652+
653+ value += digitValue;
644654 }
645655
646656 return true ;
0 commit comments