подтверждение onbeforeunload экранирует настройку

Проблема состоит в том, что C/C++ на самом деле не делает никакой граничной проверки относительно массивов. Это зависит от ОС, чтобы гарантировать доступ к допустимой памяти.

В данном случае, Вы объявляете основанный на стеке массив. В зависимости от конкретной реализации, получая доступ вне границ измерения массива просто получит доступ к другой части уже выделенного стекового пространства (большая часть ОС, и потоки резервируют определенную часть памяти для стека). Пока Вы просто, оказывается, играете вокруг в предварительно выделенном стековом пространстве, все не откажет (обратите внимание, что я не сказал что работа).

то, Что происходит на последней строке, - то, что Вы теперь получили доступ вне части памяти, которая выделяется для стека. В результате Вы индексируете в часть памяти, которая не выделяется Вашему процессу или выделяется способом только для чтения. ОС видит это и отправляет отказ seg в процесс.

Это - одна из причин, что C/C++ так опасен когда дело доходит до граничной проверки.

6
задан Bucket 6 December 2013 в 21:21
поделиться

2 ответа

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

Обратите внимание: большинство браузеров помещают это сообщение после другого текста. У вас нет полного контроля над содержанием диалогового окна подтверждения.

11
ответ дан 8 December 2019 в 17:24
поделиться

Нет, стандартного из браузера не обойтись. Все, что вы можете сделать, это вставить в него произвольный текст; если вы используете следующий обработчик событий (зарегистрировал способ библиотеки прототипа):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

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

Вы уверены, что хотите уйти с этой страницы?

foo bar baz

Нажмите OK, чтобы продолжить, или Отмена, чтобы остаться на текущей странице.

[OK] [Отмена]

3
ответ дан 8 December 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: