Skip to content

va_arg() causes EXC_BAD_ACCESS in mocked objects #524

Open
@karolszafranski

Description

@karolszafranski

Executing a variadic method on a mocked object results in an "EXC_BAD_ACCESS" crash.

The variadic method does not have to be executed with OCMock (#191). It occurs even if called directly.

#import <XCTest/XCTest.h>
#import <OCMock.h>

@interface BaseClass: NSObject
@end

@implementation BaseClass

- (void)logLevel:(NSUInteger)messageLogLevel message:(NSString *)format, ... {
    va_list args;
    va_start(args, format);
    NSString* message = [[NSString alloc] initWithFormat:format arguments:args];
    va_end(args);
    NSLog(@"%li: %@", messageLogLevel, message);
}

@end

@interface OCMockFailureTestTests : XCTestCase
@end

@implementation OCMockFailureTestTests

- (void)testExample {
    BaseClass* obj = [BaseClass new];
    id mock = [OCMockObject partialMockForObject:obj];

    [obj logLevel:3 message:@"%@", @"abc"]; // crash
}

@end

Executed on an iOS Simulator running on a Macbook Pro with M1, not reproducible with i5.

OCMock v3.9.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    M1Requires Apple silicon to address

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions