summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bf8da42)
raw | patch | inline | side by side (parent: bf8da42)
author | Max Kellermann <max@duempel.org> | |
Wed, 17 Sep 2008 23:05:16 +0000 (01:05 +0200) | ||
committer | Max Kellermann <max@duempel.org> | |
Wed, 17 Sep 2008 23:05:16 +0000 (01:05 +0200) |
512 characters should be well enough for error messages which are
actually being displayed somewhere. Use sizeof(errorStr) instead of
MPD_BUFFER_MAX_LENGTH everywhere. Do proper length checking when
copying the output buffer to errorStr.
actually being displayed somewhere. Use sizeof(errorStr) instead of
MPD_BUFFER_MAX_LENGTH everywhere. Do proper length checking when
copying the output buffer to errorStr.
src/libmpdclient.c | patch | blob | history | |
src/libmpdclient.h | patch | blob | history |
diff --git a/src/libmpdclient.c b/src/libmpdclient.c
index 8d1670f96951d79adc3fbde3a82e91450f90a345..b29ffe746527fda3c0cf9520d21b25dd4834746f 100644 (file)
--- a/src/libmpdclient.c
+++ b/src/libmpdclient.c
if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0 ||
LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2 ) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"Could not find usable WinSock DLL.");
connection->error = MPD_ERROR_SYSTEM;
return 1;
@@ -141,7 +141,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
error = getaddrinfo(host, service, &hints, &addrinfo);
if (error) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"host \"%s\" not found: %s",host, gai_strerror(error));
connection->error = MPD_ERROR_UNKHOST;
return -1;
@@ -151,7 +151,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
/* create socket */
connection->sock = socket(res->ai_family, SOCK_STREAM, res->ai_protocol);
if (connection->sock < 0) {
- snprintf(connection->errorStr, MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems creating socket: %s",
strerror(errno));
connection->error = MPD_ERROR_SYSTEM;
@@ -172,7 +172,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
freeaddrinfo(addrinfo);
if (connection->sock < 0) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems connecting to \"%s\" on port"
" %i: %s",host,port, strerror(errno));
connection->error = MPD_ERROR_CONNPORT;
@@ -192,7 +192,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
struct sockaddr_in sin;
if(!(he=gethostbyname(host))) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"host \"%s\" not found",host);
connection->error = MPD_ERROR_UNKHOST;
return -1;
@@ -227,7 +227,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
/* connect stuff */
if (do_connect_fail(connection, dest, destlen)) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems connecting to \"%s\" on port"
" %i",host,port);
connection->error = MPD_ERROR_CONNPORT;
int i;
if(strncmp(output,MPD_WELCOME_MESSAGE,strlen(MPD_WELCOME_MESSAGE))) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"mpd not running on port %i on host \"%s\"",
port,host);
connection->error = MPD_ERROR_NOTMPD;
if(tmp) connection->version[i] = strtol(tmp,&test,10);
if (!tmp || (test[0] != '.' && test[0] != '\0')) {
- snprintf(connection->errorStr,
- MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"error parsing version number at "
"\"%s\"",
&output[strlen(MPD_WELCOME_MESSAGE)]);
close(connection->sock);
connection->sock = 0;
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems connecting to \"%s\": %s",
host, strerror(errno));
connection->error = MPD_ERROR_CONNPORT;
@@ -389,8 +388,7 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
connection->buflen = 0;
connection->bufstart = 0;
- strcpy(connection->errorStr,"");
- connection->error = 0;
+ mpd_clearError(connection);
connection->doneProcessing = 0;
connection->commandList = 0;
connection->listOks = 0;
@@ -421,7 +419,7 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
&(connection->buffer[connection->buflen]),
MPD_BUFFER_MAX_LENGTH-connection->buflen,0);
if(readed<=0) {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems getting a response from"
" \"%s\" on port %i : %s",host,
port, strerror(errno));
@@ -434,14 +432,14 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
if (SELECT_ERRNO_IGNORE)
continue;
snprintf(connection->errorStr,
- MPD_BUFFER_MAX_LENGTH,
+ sizeof(connection->errorStr),
"problems connecting to \"%s\" on port"
" %i",host,port);
connection->error = MPD_ERROR_CONNPORT;
return connection;
}
else {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"timeout in attempting to get a response from"
" \"%s\" on port %i",host,port);
connection->error = MPD_ERROR_NORESPONSE;
if(ret<=0)
{
if (SENDRECV_ERRNO_IGNORE) continue;
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"problems giving command \"%s\"",command);
connection->error = MPD_ERROR_SENDING;
return;
if(commandLen>0) {
perror("");
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"timeout sending command \"%s\"",command);
connection->error = MPD_ERROR_TIMEOUT;
return;
}
if(strncmp(output,"ACK",strlen("ACK"))==0) {
+ size_t length = strlen(output);
char * test;
char * needle;
int val;
- strcpy(connection->errorStr, output);
+ if (length >= sizeof(connection->errorStr))
+ length = sizeof(connection->errorStr) - 1;
+
+ memcpy(connection->errorStr, output, length);
+ connection->errorStr[length] = 0;
connection->error = MPD_ERROR_ACK;
connection->errorCode = MPD_ACK_ERROR_UNK;
connection->errorAt = MPD_ERROR_AT_UNK;
connection->returnElement = mpd_newReturnElement(name,&(value[1]));
}
else {
- snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
+ snprintf(connection->errorStr, sizeof(connection->errorStr),
"error parsing: %s:%s",name,value);
- connection->errorStr[MPD_BUFFER_MAX_LENGTH] = '\0';
connection->error = 1;
}
}
diff --git a/src/libmpdclient.h b/src/libmpdclient.h
index e91013b9c1f4e37518c1672de86674ee11748864..c4a22b2d83ed643c3f181ad91ddd156d2a422218 100644 (file)
--- a/src/libmpdclient.h
+++ b/src/libmpdclient.h
/* use this to check the version of mpd */
int version[3];
/* IMPORTANT, you want to get the error messages from here */
- char errorStr[MPD_BUFFER_MAX_LENGTH+1];
+ char errorStr[512];
int errorCode;
int errorAt;
/* this will be set to MPD_ERROR_* if there is an error, 0 if not */