diff options
author | wtc%google.com <devnull@localhost> | 2012-06-20 16:44:23 +0000 |
---|---|---|
committer | wtc%google.com <devnull@localhost> | 2012-06-20 16:44:23 +0000 |
commit | c380ff8be54624281b9506d32e5f3079e3cd10c6 (patch) | |
tree | e128cea30a15d17fa619721e889fe51aeffe44a4 | |
parent | 67b48f8f38ef4b46fa05d939fd265f8ff3d3f684 (diff) | |
download | nspr-hg-c380ff8be54624281b9506d32e5f3079e3cd10c6.tar.gz |
Bug 758837: Fix an off-by-one error in the thread name reduction code inNSPR_4_9_2_BETA2
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
-rw-r--r-- | pr/src/pthreads/ptthread.c | 15 | ||||
-rw-r--r-- | pr/src/threads/combined/pruthr.c | 6 |
2 files changed, 10 insertions, 11 deletions
diff --git a/pr/src/pthreads/ptthread.c b/pr/src/pthreads/ptthread.c index c4ac2dca..9b98dd25 100644 --- a/pr/src/pthreads/ptthread.c +++ b/pr/src/pthreads/ptthread.c @@ -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'; diff --git a/pr/src/threads/combined/pruthr.c b/pr/src/threads/combined/pruthr.c index fa5f5209..7ecccf55 100644 --- a/pr/src/threads/combined/pruthr.c +++ b/pr/src/threads/combined/pruthr.c @@ -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; } |