Bug 758837: Fix an off-by-one error in the thread name reduction code in

PR_SetCurrentThreadName in ptthread.c by changing nameLen to be just
strlen(name).  Use "~" instead of ".." to elide the middle part of a long
thread name.  Patch by Honza Bambas <honzab.moz@firemni.cz>.  r=wtc.
Modified Files: ptthread.c pruthr.c


git-svn-id: svn://10.0.0.236/trunk@263970 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
wtc%google.com 2012-06-20 16:44:23 +00:00
parent 7756f85dae
commit 75f13a6942
2 changed files with 10 additions and 11 deletions

View File

@ -1631,11 +1631,11 @@ PR_IMPLEMENT(PRStatus) PR_SetCurrentThreadName(const char *name)
return PR_FAILURE;
PR_Free(thread->name);
nameLen = strlen(name) + 1;
thread->name = (char *)PR_Malloc(nameLen);
nameLen = strlen(name);
thread->name = (char *)PR_Malloc(nameLen + 1);
if (!thread->name)
return PR_FAILURE;
memcpy(thread->name, name, nameLen);
memcpy(thread->name, name, nameLen + 1);
#if defined(OPENBSD) || defined(FREEBSD)
result = pthread_set_name_np(thread->id, name);
@ -1659,13 +1659,12 @@ PR_IMPLEMENT(PRStatus) PR_SetCurrentThreadName(const char *name)
#define SETNAME_LENGTH_CONSTRAINT 15
#define SETNAME_FRAGMENT1_LENGTH (SETNAME_LENGTH_CONSTRAINT >> 1)
#define SETNAME_FRAGMENT2_LENGTH \
(SETNAME_LENGTH_CONSTRAINT - SETNAME_FRAGMENT1_LENGTH - 2)
(SETNAME_LENGTH_CONSTRAINT - SETNAME_FRAGMENT1_LENGTH - 1)
char name_dup[SETNAME_LENGTH_CONSTRAINT + 1];
if (nameLen > SETNAME_LENGTH_CONSTRAINT + 1) {
if (nameLen > SETNAME_LENGTH_CONSTRAINT) {
memcpy(name_dup, name, SETNAME_FRAGMENT1_LENGTH);
name_dup[SETNAME_FRAGMENT1_LENGTH] = '.';
name_dup[SETNAME_FRAGMENT1_LENGTH + 1] = '.';
memcpy(name_dup + SETNAME_FRAGMENT1_LENGTH + 2,
name_dup[SETNAME_FRAGMENT1_LENGTH] = '~';
memcpy(name_dup + SETNAME_FRAGMENT1_LENGTH + 1,
name + nameLen - SETNAME_FRAGMENT2_LENGTH,
SETNAME_FRAGMENT2_LENGTH);
name_dup[SETNAME_LENGTH_CONSTRAINT] = '\0';

View File

@ -1597,11 +1597,11 @@ PR_IMPLEMENT(PRStatus) PR_SetCurrentThreadName(const char *name)
return PR_FAILURE;
PR_Free(thread->name);
nameLen = strlen(name) + 1;
thread->name = (char *)PR_Malloc(nameLen);
nameLen = strlen(name);
thread->name = (char *)PR_Malloc(nameLen + 1);
if (!thread->name)
return PR_FAILURE;
memcpy(thread->name, name, nameLen);
memcpy(thread->name, name, nameLen + 1);
_PR_MD_SET_CURRENT_THREAD_NAME(thread->name);
return PR_SUCCESS;
}