Index: src/runtime/exception.m ================================================================== --- src/runtime/exception.m +++ src/runtime/exception.m @@ -414,10 +414,11 @@ displacement = (intptr_t)read_sleb128(&ptr); actionrecords += displacement; if (filter > 0 && !(actions & _UA_FORCE_UNWIND) && !foreign) { Class class; + const char *className; uintptr_t c; const uint8_t *tmp; #if defined(__arm__) || defined(__ARM__) tmp = lsda->typestable - (filter * 4); @@ -435,12 +436,14 @@ c = (uintptr_t)read_value(lsda->typestable_enc, &tmp); c = (uintptr_t)resolve_value(c, lsda->typestable_enc, lsda->typestable - i, lsda->typestable_base); #endif - if (c != 0) - class = objc_getRequiredClass((const char*)c); + className = (const char*)c; + + if (className != NULL && *className != '\0') + class = objc_getRequiredClass(className); else class = Nil; if (class_matches(class, e->object)) { *filtervalue = filter;