Skip to content
This repository has been archived by the owner on Feb 19, 2020. It is now read-only.

Commit

Permalink
Merge branch 'release/3.5.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
DerAndereAndi committed Jan 14, 2014
2 parents 9a8ed3e + e4010ea commit a561e5c
Showing 1 changed file with 33 additions and 20 deletions.
53 changes: 33 additions & 20 deletions Classes/BITAuthenticator.m
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
static NSString* const kBITAuthenticatorAuthTokenTypeKey = @"BITAuthenticatorAuthTokenTypeKey";

typedef unsigned int bit_uint32;
static unsigned char kBITPNGHeader[8] = {137, 80, 78, 71, 13, 10, 26, 10};
static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44};

@implementation BITAuthenticator {
Expand Down Expand Up @@ -699,44 +700,56 @@ - (void)processFullSizeImage {
free(source);
return;
}

if ((fs.st_size < 20) || (memcmp(source, kBITPNGHeader, 8))) {
// Not a PNG
free(source);
return;
}

buffer = source + 8;

NSString *result = nil;
bit_uint32 length;
unsigned char *name;
unsigned char *data;
NSString *result = nil;

buffer = source + 8;
int index = 0;
int chunk_index = 0;
long long bytes_left = fs.st_size - 8;
do {
memcpy(&length, buffer, 4);
length = ntohl(length);
name = (unsigned char *)malloc(4);

buffer += 4;

name = (unsigned char *)malloc(4);
memcpy(name, buffer, 4);

buffer += 4;
data = (unsigned char *)malloc(length + 1);
memcpy(data, buffer, length);
buffer += length;
buffer += 4;

if (!strcmp((const char *)name, "tEXt")) {
data[length] = 0;
NSString *key = [NSString stringWithCString:(char *)data encoding:NSUTF8StringEncoding];
if (bytes_left >= length) {
memcpy(data, buffer, length);

buffer += length;
buffer += 4;
if (!strcmp((const char *)name, "tEXt")) {
data[length] = 0;
NSString *key = [NSString stringWithCString:(char *)data encoding:NSUTF8StringEncoding];

if ([key isEqualToString:@"Data"]) {
result = [NSString stringWithCString:(char *)(data + key.length + 1) encoding:NSUTF8StringEncoding];
}
}

if ([key isEqualToString:@"Data"]) {
result = [NSString stringWithCString:(char *)(data + key.length + 1) encoding:NSUTF8StringEncoding];
if (!memcmp(name, kBITPNGEndChunk, 4)){
chunk_index = 128;
}
}

if (!memcmp(name, kBITPNGEndChunk, 4)){
index = 128;
}


free(data);
free(name);
} while (index++ < 128);

bytes_left -= (length + 3 * 4);
} while ((chunk_index++ < 128) && (bytes_left > 8));

free(source);

Expand Down

0 comments on commit a561e5c

Please sign in to comment.