Avoid ambiguous change of SsdpEvent in unique_service_name.
Handle overflow before changing SsdpEvent. Because the behavior of "snprintf" is platform dependent in such case.
This commit is contained in:
parent
35819a7a44
commit
f299d6597a
@ -2,6 +2,13 @@
|
|||||||
Version 1.6.16
|
Version 1.6.16
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
|
2012-03-14 Yoichi NAKAYAMA <yoichi.nakayama(at)gmail.com>
|
||||||
|
|
||||||
|
Avoid ambiguous change of SsdpEvent in unique_service_name.
|
||||||
|
|
||||||
|
Handle overflow before changing SsdpEvent.
|
||||||
|
Because the behavior of "snprintf" is platform dependent in such case.
|
||||||
|
|
||||||
2012-03-14 Yoichi NAKAYAMA <yoichi.nakayama(at)gmail.com>
|
2012-03-14 Yoichi NAKAYAMA <yoichi.nakayama(at)gmail.com>
|
||||||
|
|
||||||
SF Bug Tracker id 3502958 - The commit 5944960e prevents a pupnp client (amule) from receiving replies from an IGD device.
|
SF Bug Tracker id 3502958 - The commit 5944960e prevents a pupnp client (amule) from receiving replies from an IGD device.
|
||||||
|
@ -458,7 +458,6 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
|
|||||||
char *ptr3 = NULL;
|
char *ptr3 = NULL;
|
||||||
int CommandFound = 0;
|
int CommandFound = 0;
|
||||||
size_t n = (size_t)0;
|
size_t n = (size_t)0;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (strstr(cmd, "uuid:schemas") != NULL) {
|
if (strstr(cmd, "uuid:schemas") != NULL) {
|
||||||
ptr1 = strstr(cmd, ":device");
|
ptr1 = strstr(cmd, ":device");
|
||||||
@ -471,10 +470,10 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
|
|||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
if (ptr3 != NULL) {
|
if (ptr3 != NULL) {
|
||||||
rc = snprintf(Evt->UDN, sizeof(Evt->UDN), "uuid:%s",
|
if (strlen("uuid:") + strlen(ptr3 + 1) >= sizeof(Evt->UDN))
|
||||||
ptr3 + 1);
|
|
||||||
if (rc < 0 || (unsigned int) rc >= sizeof(Evt->UDN))
|
|
||||||
return -1;
|
return -1;
|
||||||
|
snprintf(Evt->UDN, sizeof(Evt->UDN), "uuid:%s",
|
||||||
|
ptr3 + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
@ -483,10 +482,10 @@ int unique_service_name(char *cmd, SsdpEvent *Evt)
|
|||||||
n = (size_t)ptr3 - (size_t)ptr1;
|
n = (size_t)ptr3 - (size_t)ptr1;
|
||||||
strncpy(TempBuf, ptr1, n);
|
strncpy(TempBuf, ptr1, n);
|
||||||
TempBuf[n] = '\0';
|
TempBuf[n] = '\0';
|
||||||
rc = snprintf(Evt->DeviceType, sizeof(Evt->DeviceType),
|
if (strlen("urn") + strlen(TempBuf) >= sizeof(Evt->DeviceType))
|
||||||
"urn%s", TempBuf);
|
|
||||||
if (rc < 0 || (unsigned int) rc >= sizeof(Evt->DeviceType))
|
|
||||||
return -1;
|
return -1;
|
||||||
|
snprintf(Evt->DeviceType, sizeof(Evt->DeviceType),
|
||||||
|
"urn%s", TempBuf);
|
||||||
} else
|
} else
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user