blob: 6a3e91a5e6d4308548d26f66336dbdcd7a862a72 [file] [log] [blame]
diff -ruN htpdate/htpdate.c htpdate.new/htpdate.c
--- htpdate/htpdate.c 2010-11-30 14:53:31.637209639 -0600
+++ htpdate.new/htpdate.c 2010-11-30 15:48:25.647523022 -0600
@@ -158,7 +158,7 @@
char url[URLSIZE] = { '\0' };
char *pdate = NULL;
int error = -1; /* used when returning non-zero return values */
-
+ ssize_t buffer_size = 0;
/* Connect to web server via proxy server or directly */
memset( &hints, 0, sizeof(hints) );
@@ -244,8 +244,10 @@
/* Receive data from the web server
The return code from recv() is the number of bytes received
*/
- if ( recv(server_s, buffer, BUFFERSIZE, 0) != -1 ) {
-
+ buffer_size = recv(server_s, buffer, BUFFERSIZE - 1, 0);
+ if ( buffer_size >= 0 ) {
+ /* NUL terminate the string data. */
+ buffer[buffer_size] = '\0';
/* Assuming that network delay (server->htpdate) is neglectable,
the received web server time "should" match the local time.
@@ -264,9 +266,12 @@
rtt = ( timeofday.tv_sec - rtt ) * 1000000 + \
timeofday.tv_usec - when;
- /* Look for the line that contains Date: */
- if ( (pdate = strstr(buffer, "Date: ")) != NULL ) {
+ /* Look for the line that contains Date: and has enough data. */
+ pdate = strstr(buffer, "Date: ");
+ /* strlen("Date: ...") must be >= 11. */
+ if ( pdate != NULL && strlen(pdate) >= 11 ) {
strncpy(remote_time, pdate + 11, 24);
+ remote_time[24] = '\0';
recvdvalidresp = 1;
if ( strptime( remote_time, "%d %b %Y %T", &tm) != NULL) {