@@ -1631,11 +1631,11 @@ PR_IMPLEMENT(PRStatus) PR_SetCurrentThreadName(const char *name)
16311631 return PR_FAILURE ;
16321632
16331633 PR_Free (thread->name );
1634- nameLen = strlen (name) + 1 ;
1635- thread->name = (char *)PR_Malloc (nameLen);
1634+ nameLen = strlen (name);
1635+ thread->name = (char *)PR_Malloc (nameLen + 1 );
16361636 if (!thread->name )
16371637 return PR_FAILURE ;
1638- memcpy (thread->name , name, nameLen);
1638+ memcpy (thread->name , name, nameLen + 1 );
16391639
16401640#if defined(OPENBSD) || defined(FREEBSD)
16411641 result = pthread_set_name_np (thread->id , name);
@@ -1657,9 +1657,16 @@ PR_IMPLEMENT(PRStatus) PR_SetCurrentThreadName(const char *name)
16571657 return PR_SUCCESS ;
16581658
16591659#define SETNAME_LENGTH_CONSTRAINT 15
1660+ #define SETNAME_FRAGMENT1_LENGTH (SETNAME_LENGTH_CONSTRAINT >> 1 )
1661+ #define SETNAME_FRAGMENT2_LENGTH \
1662+ (SETNAME_LENGTH_CONSTRAINT - SETNAME_FRAGMENT1_LENGTH - 1 )
16601663 char name_dup[SETNAME_LENGTH_CONSTRAINT + 1 ];
1661- if (nameLen > SETNAME_LENGTH_CONSTRAINT + 1 ) {
1662- memcpy (name_dup, name, SETNAME_LENGTH_CONSTRAINT );
1664+ if (nameLen > SETNAME_LENGTH_CONSTRAINT ) {
1665+ memcpy (name_dup, name, SETNAME_FRAGMENT1_LENGTH );
1666+ name_dup[SETNAME_FRAGMENT1_LENGTH ] = ' ~' ;
1667+ memcpy (name_dup + SETNAME_FRAGMENT1_LENGTH + 1 ,
1668+ name + nameLen - SETNAME_FRAGMENT2_LENGTH ,
1669+ SETNAME_FRAGMENT2_LENGTH );
16631670 name_dup[SETNAME_LENGTH_CONSTRAINT ] = ' \0 ' ;
16641671 name = name_dup;
16651672 }
0 commit comments