Проблема с кодом: строка формата не является строковым литералом

Возможный дубликат:
SnowLeopard Xcode warning: «формат не строковый литерал и аргументы формата»

Я получаю следующую проблему для этой строки кода.

«Строка формата не является строковым литералом (потенциально небезопасным)»

NSLog([NSString stringWithFormat:@"%@", entered]); 

Какие-либо предложения?

Компилятор хочет, чтобы мы использовали константу NSString для строки формата (первый аргумент NSLog ), поскольку она предотвращает довольно известный эксплойт, который потенциально может нарушить безопасность. Например, вы можете изменить код, который вы опубликовали, чтобы сохранить компилятор счастливым:

 NSLog(@"%@", [NSString stringWithFormat:@"%@", entered]); 

РЕДАКТИРОВАТЬ

И, конечно, вышеизложенное могло (и должно) просто быть написано следующим образом:

 NSLog(@"%@", entered); 

Характер безопасности

Строка неконтролируемого формата [1] – это тип уязвимости программного обеспечения, обнаруженной около 1999 года, которая может использоваться в целях безопасности. Раньше считалось, что безвредные эксплоиты строки формата могут использоваться для сбоя программы или для выполнения вредоносного кода. Проблема связана с использованием неконтролируемого ввода пользователем в качестве параметра строки формата в некоторых функциях C, которые выполняют форматирование, например printf() . Злонамеренный пользователь может использовать маркеры %s и %x , среди прочих, для печати данных из стека или, возможно, в других местах в памяти. Можно также записать произвольные данные в произвольные местоположения, используя токен формата %n , который командует printf() и аналогичные функции для записи количества байтов, отформатированных на адрес, хранящийся в стеке.

Типичный эксплойт использует комбинацию этих методов, чтобы заставить программу переписать адрес библиотечной функции или обратный адрес в стеке с указателем на какой-то вредоносный шелл-код. Параметры заполнения для форматирования спецификаторов используются для управления количеством выходных байтов, а токен %x используется для посылки байтов из стека до тех пор, пока не будет достигнуто начало самой строки формата. Начало строки формата создается так, чтобы содержать адрес, в котором токен формата %n может быть перезаписан адресом исполняемого вредоносного кода.

Источник: Википедия Строка неконтролируемого формата

[1]: http://cwe.mitre.org/data/definitions/134.html «CWE-134: строка неконтролируемого формата». Общее перечисление Слабости. MITER.

Вот решение.

Предупреждение: «формат не строковый литерал и аргументы формата»

Попробуйте

 NSLog(@"%@",entered); 

потому что NSLog также может делать форматирование для вас …

Пытаться:

 NSLog(@"%@",[NSString stringWithFormat:@"%@",entered]); 

Надеюсь, это вам поможет. 🙂

  • applicationWillEnterForeground против applicationDidBecomeActive, applicationWillResignActive vs. applicationDidEnterBackground
  • Разработка iPhone: освобожден указатель
  • В чем разница между «отображаемым именем пакета» и «именем пакета» в информационном plist приложения cocoa
  • Использование хеша MD5 в строке в cocoa?
  • Как сделать кнопку перехвата надписью для перехвата событий?
  • Подчеркивать префикс имени свойства?
  • Загрузка изображений из фоновой темы с использованием блоков
  • Автоматически запускать локальные уведомления ежедневно в динамическое время, заданное в массивах. objective ios
  • Как установить получателей для UIActivityViewController в iOS 6?
  • Как программно изменить оттенок UIImage?
  • Соглашение об именах iPhone ivar
  • Давайте будем гением компьютера.