mapbox / mapbox/XcodeClangFormat

Memory leak with custom style

Open
#47 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Objective-C++
Stars
807
Forks
102
PR merge metrics
No merged PRs in 30d

Description

- Setup the Xcode project for XcodeClangFormat for debugging.
- Build the app and set the style to https://github.com/blender/blender/blob/master/.clang-format
- Run **Extension** this time and Xcode launches. Wait for the debugger to attach to the extension.
- New Xcode command line tool project of C++ language.
- In the C++ file, select all, paste the code given in the summary. [1] it's total 18 lines.
- Editor > clang format > format entire file. It will format it correctly.
- Select all again, paste the code still in your clipboard.
- Editor > clang format > format entire file. It will fail & the original Xcode instance shows memory increase that settles around 500 MB. The trace appears in the console [2] & UI looks like this [3].

[1] Code to copy

```
//
// main.cpp
// clang-format-test
//
// Copyright © 2020 ak. All rights reserved.
//

#include
#include "main.hh"

int main(int argc, const char *argv[])
{
// Long comment that must be broken down in multiple lines.
// insert code here... insert code here... insert code here... insert code here... insert code here... insert code here...
std::cout << "Hello, World!\n";
return 0;
}

```

[2] Trace in console

```
2020-08-03 00:39:49.395275+0530 clang-format[6941:258937] [User Defaults] Couldn't read values in CFPrefsPlistSource<0x60b000012c00> (Domain: XcodeClangFormat, User: kCFPreferencesAnyUser, ByHost: Yes, Container: (null), Contents Need Refresh: Yes): Using kCFPreferencesAnyUser with a container is only allowed for System Containers, detaching from cfprefsd
2020-08-03 00:40:00.626852+0530 clang-format[6941:258937] [general] connection from pid 6924: Warning: Exception caught during invocation of received message, dropping incoming message and invalidating the connection.
Exception: *** -[__NSArrayM objectAtIndex:]: index 18 beyond bounds [0 .. 17]
*** -[__NSArrayM objectAtIndex:]: index 18 beyond bounds [0 .. 17]
(
0 CoreFoundation 0x00007fff46876a7d __exceptionPreprocess + 256
1 libobjc.A.dylib 0x00007fff70f4ba17 objc_exception_throw + 48
2 CoreFoundation 0x00007fff468b5a74 -[CFPrefsConfigurationFileSource initWithConfigurationPropertyList:containingPreferences:] + 0
3 CoreFoundation 0x00007fff467b21de -[CFPrefsSearchListSource addNamedVolatileSourceForIdentifier:] + 0
4 clang-format 0x0000000105a5ce7b -[ClangFormatCommand performCommandWithInvocation:completionHandler:] + 9099
5 XcodeKit 0x000000010ae192f4 -[_XCSourceEditorService performCommandInvocation:commandIdentifier:request:reply:] + 494
6 Foundation 0x00007fff48a8da0b __NSXPCCONNECTION_IS_CALLING_OUT_TO_EXPORTED_OBJECT_S4__ + 12
7 Foundation 0x00007fff48a3298f -[NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:] + 2499
8 Foundation 0x00007fff48a31d63 message_handler + 215
9 libxpc.dylib 0x00007fff7294df08 _xpc_connection_call_event_handler + 56
10 libxpc.dylib 0x00007fff7294be9e _xpc_connection_mach_event + 933
11 libdispatch.dylib 0x00007fff726cc6dd _dispatch_client_callout4 + 9
12 libdispatch.dylib 0x00007fff726e10d6 _dispatch_mach_msg_invoke + 436
13 libdispatch.dylib 0x00007fff726d2792 _dispatch_lane_serial_drain + 268
14 libdispatch.dylib 0x00007fff726e1c19 _dispatch_mach_invoke + 481
15 libdispatch.dylib 0x00007fff726d2792 _dispatch_lane_serial_drain + 268
16 libdispatch.dylib 0x00007fff726d33c6 _dispatch_lane_invoke + 433
17 libdispatch.dylib 0x00007fff726db6ed _dispatch_workloop_worker_thread + 598
18 libsystem_pthread.dylib 0x00007fff7290c611 _pthread_wqthread + 421
19 libsystem_pthread.dylib 0x00007fff7290c3fd start_wqthread + 13
)
```

[3] UI looks like

![Screenshot 2020-08-03](https://user-images.githubusercontent.com/39851968/89130603-cbeb7980-d523-11ea-8bd6-48759298fa42.png)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure in the XcodeClangFormat project using the Blender .clang-format style and the 18-line C++ example, then inspect the Extension path and the ClangFormatCommand entry point named in the trace. Done means formatting the file a second time no longer fails, the extension does not accumulate roughly 500 MB, and the XPC connection remains usable.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, objective-c
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.