Переглянути джерело

Fix more null termination bugs

master
achmizs 10 роки тому
джерело
коміт
710aa0a465

+ 6
- 5
IRCClient/IRCClientSession.m Переглянути файл

_version = [NSString stringWithFormat:@"IRCClient Framework v%s (Said Achmiz) - libirc v%d.%d (George Yunaev)", IRCCLIENTVERSION, high, low]; _version = [NSString stringWithFormat:@"IRCClient Framework v%s (Said Achmiz) - libirc v%d.%d (George Yunaev)", IRCCLIENTVERSION, high, low];
_channels = [[NSMutableDictionary alloc] init]; _channels = [[NSMutableDictionary alloc] init];
_encoding = NSUTF8StringEncoding;
} }
return self; return self;
} }
{ {
IRCClientSession* clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); IRCClientSession* clientSession = (__bridge IRCClientSession *) irc_get_ctx(session);
NSString *nick = @(origin); NSString *nick = @(origin);
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0])];
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0]) + 1];
[clientSession userJoined:nick channel:channelName]; [clientSession userJoined:nick channel:channelName];
} }
{ {
IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session);
NSString *nick = @(origin); NSString *nick = @(origin);
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0])];
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0]) + 1];
NSData *reason = nil; NSData *reason = nil;
if (count > 1) if (count > 1)
{ {
reason = [NSData dataWithBytes:params[1] length:strlen(params[1])];
reason = [NSData dataWithBytes:params[1] length:strlen(params[1]) + 1];
} }
[clientSession userParted:nick channel:channelName withReason:reason]; [clientSession userParted:nick channel:channelName withReason:reason];
{ {
IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session);
NSString *nick = @(origin); NSString *nick = @(origin);
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0])];
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0]) + 1];
NSString *mode = @(params[1]); NSString *mode = @(params[1]);
NSString *modeParams = nil; NSString *modeParams = nil;
{ {
IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session);
NSString *nick = @(origin); NSString *nick = @(origin);
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0])];
NSData *channelName = [NSData dataWithBytes:params[0] length:strlen(params[0]) + 1];
NSData *topic = nil; NSData *topic = nil;
if (count > 1) if (count > 1)

+ 3
- 3
NSData+SA_NSDataExtensions/NSData+SA_NSDataExtensions.m Переглянути файл

// //
// NSData+SA_NSDataExtensions.h
// NSData+SA_NSDataExtensions.m
// //
// Copyright (c) 2015 Said Achmiz. // Copyright (c) 2015 Said Achmiz.
// //
[self getBytes:terminated_string_buffer length:self.length]; [self getBytes:terminated_string_buffer length:self.length];
terminated_string_buffer[self.length] = '\0'; terminated_string_buffer[self.length] = '\0';
return [NSData dataWithBytesNoCopy:terminated_string_buffer length:self.length + 1 freeWhenDone:YES];
return [NSData dataWithBytesNoCopy:terminated_string_buffer length:(self.length + 1) freeWhenDone:YES];
} }
} }


char* unterminated_string_buffer = malloc(self.length - 1); char* unterminated_string_buffer = malloc(self.length - 1);
[self getBytes:unterminated_string_buffer length:self.length - 1]; [self getBytes:unterminated_string_buffer length:self.length - 1];
return [NSData dataWithBytesNoCopy:unterminated_string_buffer length:self.length - 1 freeWhenDone:YES];
return [NSData dataWithBytesNoCopy:unterminated_string_buffer length:(self.length - 1) freeWhenDone:YES];
} }
} }



+ 7
- 0
NSData+SA_NSDataExtensions/README.md Переглянути файл

NSData+SA_NSDataExtensions

Adds utility functions to NSData, that help deal with null termination of C strings.

This category on NSData adds properties that allow you to get the null-terminated or non-null-terminated versions of byte arrays stored as NSData objects, and to easily check whether an NSData's byte array is, or is not, null-terminated (that is, whether its last byte is a null).

Copyright (c) 2015 Said Achmiz.

Завантаження…
Відмінити
Зберегти