| ... | ... |
@@ -1,12 +1,3 @@ |
| 1 |
-Wed Feb 18 21:39:08 EET 2009 (edwin) |
|
| 2 |
- * clamav-milter/netcode.c, clamd/others.c, clamd/server-th.c, |
|
| 3 |
- clamd/session.c: Fix wrong use of strerror_r: it doesn't have to |
|
| 4 |
- use/fill the buffer, it can return a pointer to a static location, |
|
| 5 |
- as described in the manpage. This can happen on a Linux system with |
|
| 6 |
- a foreign locale, where the LANG=C messages are returned this way. |
|
| 7 |
- (BB #1403) |
|
| 8 |
- |
|
| 9 | 1 |
Wed Feb 18 21:08:50 EET 2009 (edwin) |
| 10 | 2 |
------------------------------------ |
| 11 | 3 |
* clamd/server-th.c, unit_tests/check_clamd.c, |
| ... | ... |
@@ -75,18 +75,21 @@ static int nc_socket(struct CP_ENTRY *cpe) {
|
| 75 | 75 |
char er[256]; |
| 76 | 76 |
|
| 77 | 77 |
if (s == -1) {
|
| 78 |
- logg("!Failed to create socket: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 78 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 79 |
+ logg("!Failed to create socket: %s\n", er);
|
|
| 79 | 80 |
return -1; |
| 80 | 81 |
} |
| 81 | 82 |
flags = fcntl(s, F_GETFL, 0); |
| 82 | 83 |
if (flags == -1) {
|
| 83 |
- logg("!fcntl_get failed: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 84 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 85 |
+ logg("!fcntl_get failed: %s\n", er);
|
|
| 84 | 86 |
close(s); |
| 85 | 87 |
return -1; |
| 86 | 88 |
} |
| 87 | 89 |
flags |= O_NONBLOCK; |
| 88 | 90 |
if (fcntl(s, F_SETFL, flags) == -1) {
|
| 89 |
- logg("!fcntl_set failed: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 91 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 92 |
+ logg("!fcntl_set failed: %s\n", er);
|
|
| 90 | 93 |
close(s); |
| 91 | 94 |
return -1; |
| 92 | 95 |
} |
| ... | ... |
@@ -102,7 +105,8 @@ static int nc_connect(int s, struct CP_ENTRY *cpe) {
|
| 102 | 102 |
|
| 103 | 103 |
if (!res) return 0; |
| 104 | 104 |
if (errno != EINPROGRESS) {
|
| 105 |
- logg("*connect failed: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 105 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 106 |
+ logg("*connect failed: %s\n", er);
|
|
| 106 | 107 |
close(s); |
| 107 | 108 |
return -1; |
| 108 | 109 |
} |
| ... | ... |
@@ -154,7 +158,8 @@ int nc_send(int s, const void *buff, size_t len) {
|
| 154 | 154 |
continue; |
| 155 | 155 |
} |
| 156 | 156 |
if(errno != EAGAIN && errno != EWOULDBLOCK) {
|
| 157 |
- logg("!send failed: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 157 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 158 |
+ logg("!send failed: %s\n", er);
|
|
| 158 | 159 |
close(s); |
| 159 | 160 |
return 1; |
| 160 | 161 |
} |
| ... | ... |
@@ -214,7 +219,8 @@ int nc_sendmsg(int s, int fd) {
|
| 214 | 214 |
|
| 215 | 215 |
if((ret = sendmsg(s, &msg, 0)) == -1) {
|
| 216 | 216 |
char er[256]; |
| 217 |
- logg("!clamfi_eom: FD send failed (%s)\n", strerror_r(errno, er, sizeof(er)));
|
|
| 217 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 218 |
+ logg("!clamfi_eom: FD send failed (%s)\n", er);
|
|
| 218 | 219 |
close(s); |
| 219 | 220 |
} |
| 220 | 221 |
return ret; |
| ... | ... |
@@ -251,7 +257,8 @@ char *nc_recv(int s) {
|
| 251 | 251 |
res = recv(s, &buf[len], sizeof(buf) - len, 0); |
| 252 | 252 |
if(res==-1) {
|
| 253 | 253 |
char er[256]; |
| 254 |
- logg("!recv failed after successful select: %s\n", strerror_r(errno, er, sizeof(er)));
|
|
| 254 |
+ strerror_r(errno, er, sizeof(er)); |
|
| 255 |
+ logg("!recv failed after successful select: %s\n", er);
|
|
| 255 | 256 |
close(s); |
| 256 | 257 |
return NULL; |
| 257 | 258 |
} |
| ... | ... |
@@ -608,16 +608,15 @@ int fds_poll_recv(struct fd_data *data, int timeout, int check_signals) |
| 608 | 608 |
|
| 609 | 609 |
if (retval == -1 && errno != EINTR) {
|
| 610 | 610 |
char buff[BUFFSIZE + 1]; |
| 611 |
- char *p; |
|
| 612 | 611 |
#ifdef HAVE_STRERROR_R |
| 613 |
- p = strerror_r(errno, buff, BUFFSIZE); |
|
| 612 |
+ strerror_r(errno, buff, BUFFSIZE); |
|
| 614 | 613 |
#else |
| 615 |
- p = ""; |
|
| 614 |
+ buff[0] = '\0'; |
|
| 616 | 615 |
#endif |
| 617 | 616 |
#ifdef HAVE_POLL |
| 618 |
- logg("!poll_recv_fds: poll failed: %s\n", p);
|
|
| 617 |
+ logg("!poll_recv_fds: poll failed: %s\n", buff);
|
|
| 619 | 618 |
#else |
| 620 |
- logg("!poll_recv_fds: select failed: %s\n", p);
|
|
| 619 |
+ logg("!poll_recv_fds: select failed: %s\n", buff);
|
|
| 621 | 620 |
#endif |
| 622 | 621 |
} |
| 623 | 622 |
|
| ... | ... |
@@ -421,7 +421,8 @@ static void *acceptloop_th(void *arg) |
| 421 | 421 |
} else if (errno != EINTR) {
|
| 422 | 422 |
/* very bad - need to exit or restart */ |
| 423 | 423 |
#ifdef HAVE_STRERROR_R |
| 424 |
- logg("!accept() failed: %s\n", strerror_r(errno, buff, BUFFSIZE));
|
|
| 424 |
+ strerror_r(errno, buff, BUFFSIZE); |
|
| 425 |
+ logg("!accept() failed: %s\n", buff);
|
|
| 425 | 426 |
#else |
| 426 | 427 |
logg("!accept() failed\n");
|
| 427 | 428 |
#endif |
| ... | ... |
@@ -157,9 +157,9 @@ int conn_reply_errno(const client_conn_t *conn, const char *path, |
| 157 | 157 |
const char *msg) |
| 158 | 158 |
{
|
| 159 | 159 |
char buf[BUFFSIZE + sizeof(". ERROR")];
|
| 160 |
- char buf2[BUFFSIZE + sizeof(". ERROR")];
|
|
| 161 | 160 |
#ifdef HAVE_STRERROR_R |
| 162 |
- snprintf(buf, sizeof(buf), "%s. ERROR", strerror_r(errno, buf2, BUFFSIZE-1)); |
|
| 161 |
+ strerror_r(errno, buf, BUFFSIZE-1); |
|
| 162 |
+ strcat(buf, ". ERROR"); |
|
| 163 | 163 |
#else |
| 164 | 164 |
snprintf(buf, sizeof(buf), "%u. ERROR", errno); |
| 165 | 165 |
#endif |