Restrict macos semaphore names to 32 chars, fix already-set size

This commit is contained in:
falkTX 2020-06-15 07:12:26 +02:00
parent 69827d12f2
commit 48342bd3d2
1 changed files with 7 additions and 4 deletions

View File

@ -37,7 +37,7 @@ void JackMachSemaphore::BuildName(const char* client_name, const char* server_na
if (strcmp(server_name, "default") == 0)
server_name = "";
snprintf(res, size, "js%d.%s%s", JackTools::GetUID(), server_name, ext_client_name);
snprintf(res, std::min(size, 32), "js%d.%s%s", JackTools::GetUID(), server_name, ext_client_name);
}
bool JackMachSemaphore::Signal()
@ -161,9 +161,12 @@ bool JackMachSemaphore::Allocate(const char* name, const char* server_name, int
return false;
}
if (ftruncate(fSharedMem, SYNC_MAX_NAME_SIZE+1) != 0) {
jack_error("Allocate: can't set shared memory size in mach shared name = %s err = %s", fName, strerror(errno));
return false;
struct stat st;
if (fstat(fSharedMem, &st) != -1 && st.st_size == 0) {
if (ftruncate(fSharedMem, SYNC_MAX_NAME_SIZE+1) != 0) {
jack_error("Allocate: can't set shared memory size in mach shared name = %s err = %s", fName, strerror(errno));
return false;
}
}
char* const sharedName = (char*)mmap(NULL, SYNC_MAX_NAME_SIZE+1, PROT_READ|PROT_WRITE, MAP_SHARED, fSharedMem, 0);