4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / harness_standalone.m M
#import <Foundation/Foundation.h>
#include <stdint.h>

#import <AppKit/AppKit.h>
#import <CoreGraphics/CoreGraphics.h>
#import <ImageIO/ImageIO.h>

extern bool CGRenderingStateGetAllowsAcceleration(void *);
extern bool CGRenderingStateSetAllowsAcceleration(void *, bool);
extern void *CGContextGetRenderingState(CGContextRef);

void dummyLogProc() {}

extern void ImageIOSetLoggingProc(void *);

int test_input(const uint8_t *buf, size_t len) {
    ImageIOSetLoggingProc(&dummyLogProc);

    NSData *content = [NSData dataWithBytes:buf length:len];
    NSImage *img = [[NSImage alloc] initWithData:content];
    CGImageRef cgImg = [img CGImageForProposedRect:nil context:nil hints:nil];

    if (cgImg) {
        size_t width = CGImageGetWidth(cgImg);
        size_t height = CGImageGetHeight(cgImg);
        CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
        CGContextRef ctx =
            CGBitmapContextCreate(0, width, height, 8, 0, colorspace, 1);
        void *renderingState = CGContextGetRenderingState(ctx);
        CGRenderingStateSetAllowsAcceleration(renderingState, false);
        CGRect rect = CGRectMake(0, 0, width, height);
        CGContextDrawImage(ctx, rect, cgImg);

        CGColorSpaceRelease(colorspace);
        CGContextRelease(ctx);
        CGImageRelease(cgImg);
    }

    [img release];
    [content release];

    return 0;
}

int main(int argc, char **argv) {
    if (argc < 2) {
        printf("Missing testcase arg\n");
        exit(-1);
    }
    NSData *tcase =
        [NSData dataWithContentsOfFile:[NSString stringWithUTF8String:argv[1]]];
    test_input((const uint8_t *)[tcase bytes], tcase.length);
}