From 710aa0a46543e7c2c1cd1b9879f0c609b8ad8ba5 Mon Sep 17 00:00:00 2001 From: achmizs Date: Tue, 22 Dec 2015 18:33:01 -0500 Subject: [PATCH] Fix more null termination bugs --- IRCClient/IRCClientSession.m | 11 ++++++----- .../NSData+SA_NSDataExtensions.m | 6 +++--- NSData+SA_NSDataExtensions/README.md | 7 +++++++ 3 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 NSData+SA_NSDataExtensions/README.md diff --git a/IRCClient/IRCClientSession.m b/IRCClient/IRCClientSession.m index 2bba8f3..da356eb 100644 --- a/IRCClient/IRCClientSession.m +++ b/IRCClient/IRCClientSession.m @@ -150,6 +150,7 @@ static void onNumericEvent(irc_session_t *session, unsigned int event, const cha _version = [NSString stringWithFormat:@"IRCClient Framework v%s (Said Achmiz) - libirc v%d.%d (George Yunaev)", IRCCLIENTVERSION, high, low]; _channels = [[NSMutableDictionary alloc] init]; + _encoding = NSUTF8StringEncoding; } return self; } @@ -585,7 +586,7 @@ static void onJoinChannel(irc_session_t *session, const char *event, const char { IRCClientSession* clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); 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]; } @@ -604,12 +605,12 @@ static void onPartChannel(irc_session_t *session, const char *event, const char { IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); 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; 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]; @@ -632,7 +633,7 @@ static void onMode(irc_session_t *session, const char *event, const char *origin { IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); 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 *modeParams = nil; @@ -674,7 +675,7 @@ static void onTopic(irc_session_t *session, const char *event, const char *origi { IRCClientSession *clientSession = (__bridge IRCClientSession *) irc_get_ctx(session); 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; if (count > 1) diff --git a/NSData+SA_NSDataExtensions/NSData+SA_NSDataExtensions.m b/NSData+SA_NSDataExtensions/NSData+SA_NSDataExtensions.m index c1e8477..dadd0ab 100644 --- a/NSData+SA_NSDataExtensions/NSData+SA_NSDataExtensions.m +++ b/NSData+SA_NSDataExtensions/NSData+SA_NSDataExtensions.m @@ -1,5 +1,5 @@ // -// NSData+SA_NSDataExtensions.h +// NSData+SA_NSDataExtensions.m // // Copyright (c) 2015 Said Achmiz. // @@ -51,7 +51,7 @@ [self getBytes:terminated_string_buffer length:self.length]; 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]; } } @@ -71,7 +71,7 @@ char* unterminated_string_buffer = malloc(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]; } } diff --git a/NSData+SA_NSDataExtensions/README.md b/NSData+SA_NSDataExtensions/README.md new file mode 100644 index 0000000..4276185 --- /dev/null +++ b/NSData+SA_NSDataExtensions/README.md @@ -0,0 +1,7 @@ +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.