summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%google.com <devnull@localhost>2012-06-20 16:44:23 +0000
committerwtc%google.com <devnull@localhost>2012-06-20 16:44:23 +0000
commitc380ff8be54624281b9506d32e5f3079e3cd10c6 (patch)
treee128cea30a15d17fa619721e889fe51aeffe44a4
parent67b48f8f38ef4b46fa05d939fd265f8ff3d3f684 (diff)
downloadnspr-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.c15
-rw-r--r--pr/src/threads/combined/pruthr.c6
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;
}