OSX: Why does GetProcessInformation () call segfault?

Here is my C method for getting the pid of the Finder process. GetProcessInformation () calls segfault. Why?

Here's the function:

static OSStatus GetFinderPID(pid_t *pid) { ProcessSerialNumber psn = {kNoProcess, kNoProcess}; ProcessInfoRec info; OSStatus status = noErr; info.processInfoLength = sizeof(ProcessInfoRec); info.processName = nil; while (!status) { status = GetNextProcess(&psn); if (!status) { status = GetProcessInformation(&psn, &info); } if (!status && info.processType == 'FNDR' && info.processSignature == 'MACS') { return GetProcessPID(&psn, pid); } } return status; } 

Here's the backtrace:

 Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x0000000032aaaba7 0x00007fffffe00623 in __bzero () (gdb) bt #0 0x00007fffffe00623 in __bzero () #1 0x00007fff833adaed in CreateFSRef () #2 0x00007fff833ab53b in FSPathMakeRefInternal () #3 0x00007fff852fc32d in _CFGetFSRefFromURL () #4 0x00007fff852fbfe0 in CFURLGetFSRef () #5 0x00007fff85dd273f in GetProcessInformation () #6 0x0000000100000bef in GetFinderPID [inlined] () at /path/to/main.c:21 
+4
source share
2 answers

Zeroing the ProcessInfoRect structure, not trying to determine which individual fields should be nullified.

+5
source

You need to set processAppSpec to zero if you do not want it to be returned, otherwise you have an invalid pointer.

+2
source

Source: https://habr.com/ru/post/1306192/


All Articles