[英]Sqlite shows EXC_BAD_ACCESS in ios SDK
此代碼在xcode 4.5
和xcode 4.6
中的iphone,ipad模擬器中完美運行。也可以在xcode 4.5
完美地與設備進行調試。 但是當我嘗試在xcode 4.6.2中調試設備時,此錯誤顯示。
這是查詢
NSString *insertQuery=[NSString stringWithFormat:@"Insert into %@ (ID,Question,Answer,Option1,Option2,Option3,Explanation,ImageName,Used) values(%d,'%@','%@','%@','%@','%@','%@','%@','%@')",table,[[d objectForKey:@"ID"]intValue],[d objectForKey:@"Question"],[d objectForKey:@"Answer"],[d objectForKey:@"Option1"],[d objectForKey:@"Option2"],[d objectForKey:@"Option3"],[d objectForKey:@"Explanation"],[d objectForKey:@"ImageName"],@"N"];
NSLog(@"insert query-%@",insertQuery);
[database executeNonQuery:insertQuery];
這是顯示EXC_BAD_ACCESS錯誤的代碼
- (BOOL)executeNonQuery:(NSString *)sql, ...
{
va_list args;
va_start(args, sql);
NSMutableArray *argsArray = [[NSMutableArray alloc] init];
NSUInteger i;
for (i = 0; i < [sql length]; ++i)
{
if ([sql characterAtIndex:i] == '?')
[argsArray addObject:va_arg(args, id)]; //This line shows error.
}
va_end(args);
BOOL success = [self executeNonQuery:sql arguments:argsArray];
[argsArray release];
return success;
}
男孩,你好,這是一些危險的代碼; 不受保護的查詢組合+解析! SQL注入攻擊潛力很高!
問題是您正在解釋動態生成的字符串內容而不考慮字符串中的內容。 Xcode的版本無關緊要。
當你insertQuery
然后將它傳遞給executeNonQuery:
,如果該字符串包含任何?
然后,這將需要將另一個參數傳遞給該方法。
即[[d objectForKey:@"ID"]intValue]
返回@"fd?Edfds???sdfefsads?f?"
; 這將被解釋為在您的executeNonQuery:
方法中需要六個參數。
繁榮
如果要對insertQuery
字符串進行完整的查詢,則需要將其傳遞給可以直接評估SQL的任何內容。 看看這個電話,我敢打賭, executeNonQuery:arguments:
會再次傳遞字符串和/或參數來將參數綁定到?
秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.