← Back to team overview

kicad-developers team mailing list archive

[PATCH] Fix MacOS coroutine segfault

 

Hi,

pcbnew is segfaulting on launch on my MacOS Sierra build, due to a null
dereference in the coroutine code:

coroutine.h
408    static CONTEXT_T callerStub( CONTEXT_T caller, INVOCATION_ARGS* aArgsPtr )
409    {
410        const auto& args = *aArgsPtr;
411        auto* cor = args.destination;

aArgsPtr is null and I don't understand WHY. However, I was able to make
things appear to work by short-circuiting this function if the argument
is null.

Patch attached. It Works For Me™, but I'd like someone who knows the
coroutine code to look and make sure I haven't made a mess of things.

-- 
Chris
>From 872d6aa16cb027dfc04da18daab85168da40fa71 Mon Sep 17 00:00:00 2001
From: Chris Pavlina <pavlina.chris@xxxxxxxxx>
Date: Wed, 22 Feb 2017 20:09:22 -0500
Subject: [PATCH] Fix MacOS coroutine segfault

---
 include/tool/coroutine.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/tool/coroutine.h b/include/tool/coroutine.h
index 36171a757..231e47a2a 100644
--- a/include/tool/coroutine.h
+++ b/include/tool/coroutine.h
@@ -407,6 +407,9 @@ private:
     /* real entry point of the coroutine */
     static CONTEXT_T callerStub( CONTEXT_T caller, INVOCATION_ARGS* aArgsPtr )
     {
+        if( !aArgsPtr )
+            return std::move( caller );
+
         const auto& args = *aArgsPtr;
         auto* cor = args.destination;
 
-- 
2.11.1


Follow ups