Что произойдет, если ваш код попытается очистить строку <a
?
Пока я читаю, он находит indexChar в позиции 0, но затем indexNextLeftBracket и indexRightBracket равны 0, вы попадаете в условие else, а затем вставляете ">" в позицию -1, которая предположительно будет вставлена в начало, давая вам строку ><a
. Новый indexRightBracket становится 0, поэтому вы удаляете из позиции 0 для 0 символов, оставляя вас с ><a
. Затем код снова находит <a
в коде, и вы отправляетесь в гонку с бесконечным циклом потребления памяти.
Даже если я ошибаюсь, вам нужно пройти некоторые юнит-тесты, чтобы убедиться, что эти крайние случаи работают правильно. Это также должно помочь вам найти реальный код зацикливания, если я не в базе.
В общем, хотя, даже если вы исправите эту конкретную ошибку, она никогда не будет очень надежной. Парсинг HTML сложен, и у черных списков HTML всегда будут дыры. Например, если я действительно хочу добавить тег <input type="hidden" name="tax"
, я просто напишу его как <input name="tax" type="hidden"
, и ваш код его проигнорирует. Лучше всего подключить реальный HTML-анализатор и разрешить только (очень маленькое) подмножество тегов, которые вам действительно нужны. Или, что еще лучше, используйте другую форму разметки и удалите все теги HTML (опять же, используя настоящий анализатор HTML некоторого описания).