From d16e3a2afbd4e0f6b6a67bb18f0e67489fcd8aad Mon Sep 17 00:00:00 2001 From: EthanArbuckle Date: Mon, 30 Jun 2014 02:26:22 -0500 Subject: [PATCH] =?UTF-8?q?Added=20some=20checks=20to=20make=20sure=20?= =?UTF-8?q?=E2=80=98start=5Flink=5Fpos=E2=80=99,=20=E2=80=98end=5Flink=5Fp?= =?UTF-8?q?os,=20and=20=E2=80=98lsqb=E2=80=99=20=20in=20CommentsTableViewC?= =?UTF-8?q?ontroller=20were=20never=20unreal=20values.=20Prevents=20the=20?= =?UTF-8?q?app=20from=20crashing=20anytime=20a=20comment=20includes=20a=20?= =?UTF-8?q?url=20link,=20whether=20formatted=20in=20brackets=20(=20[?= =?UTF-8?q?=E2=80=A6](=E2=80=A6)=20)=20or=20not?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlienBlue.xcodeproj/project.pbxproj | 9 +++++++++ Classes/CommentsTableViewController.m | 27 ++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/AlienBlue.xcodeproj/project.pbxproj b/AlienBlue.xcodeproj/project.pbxproj index 155cca2..dbeb72f 100755 --- a/AlienBlue.xcodeproj/project.pbxproj +++ b/AlienBlue.xcodeproj/project.pbxproj @@ -500,9 +500,15 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; + attributes = { + }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "AlienBlue" */; compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + en, + ); mainGroup = 29B97314FDCFA39411CA2CEA /* NeuReddit */; projectDirPath = ""; projectRoot = ""; @@ -638,6 +644,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = AlienBlue_Prefix.pch; INFOPLIST_FILE = "AlienBlue-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; PRODUCT_NAME = AlienBlue; }; name = Debug; @@ -654,6 +661,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = AlienBlue_Prefix.pch; INFOPLIST_FILE = "AlienBlue-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; PRODUCT_NAME = AlienBlue; }; name = Release; @@ -686,6 +694,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = AlienBlue_Prefix.pch; INFOPLIST_FILE = "AlienBlue-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; PRODUCT_NAME = AlienBlue; }; name = Distribution; diff --git a/Classes/CommentsTableViewController.m b/Classes/CommentsTableViewController.m index 585555d..2861560 100755 --- a/Classes/CommentsTableViewController.m +++ b/Classes/CommentsTableViewController.m @@ -90,11 +90,22 @@ - (NSMutableArray *) parseBodyForUndescribedLinks:(NSMutableDictionary *) commen int link_counter = 0; BOOL linksAvailable = TRUE; // NSLog(@"Body Text: %@",body); - while (linksAvailable) { + while (linksAvailable) { + + //no crashes here, move it along + if ([body rangeOfString:@"http://" options:NSCaseInsensitiveSearch range:NSMakeRange (pos, bodyLength - pos)].location == NSNotFound) + break; + start_link_pos = [body rangeOfString:@"http://" options:NSCaseInsensitiveSearch range:NSMakeRange (pos, bodyLength - pos)].location; - end_link_pos = [body rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location; + + if ([body rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location != NSNotFound) + end_link_pos = [body rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location; + // also try newline character if space is not found - int new_line_pos = [body rangeOfString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location; + int new_line_pos; + if ([body rangeOfString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location != NSNotFound) + new_line_pos = [body rangeOfString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange (start_link_pos, bodyLength - start_link_pos)].location; + // use the one that is closest to the http if (new_line_pos != NSNotFound) { @@ -153,10 +164,16 @@ - (NSMutableArray *) parseBodyForDescribedLinks:(NSMutableDictionary *) comment BOOL linksAvailable = TRUE; while (linksAvailable) { - lsqb = [body rangeOfString:@"[" options:NSCaseInsensitiveSearch range:NSMakeRange (pos, bodyLength - pos)].location + 1; - rsqb = [body rangeOfString:@"](" options:NSCaseInsensitiveSearch range:NSMakeRange (lsqb, bodyLength - lsqb)].location; + + //do a check for ending brackets first + if ([body rangeOfString:@"])"].location == NSNotFound) + break; + + lsqb = [body rangeOfString:@"[" options:NSCaseInsensitiveSearch range:NSMakeRange (pos, bodyLength - pos)].location + 1; //index of left square bracket + rsqb = [body rangeOfString:@"](" options:NSCaseInsensitiveSearch range:NSMakeRange (lsqb, bodyLength - lsqb)].location; ////index of right square bracket lrb = rsqb + 2; rrb = [body rangeOfString:@")" options:NSCaseInsensitiveSearch range:NSMakeRange (lrb, bodyLength - lrb)].location; + if (lsqb != NSNotFound && rsqb != NSNotFound && rrb != NSNotFound) { link_counter++;