The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимость в uBlock Origin, приводящая к краху или исчерпанию ресурсов, opennews (??), 16-Июл-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


46. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  +/
Сообщение от Аноним (46), 17-Июл-21, 08:31 
А что мешает потечь циклу? Да ничего не мешает. В грамотных руках он потечет даже лучше рекурсии.
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

56. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  –1 +/
Сообщение от пох. (?), 17-Июл-21, 11:15 
не потечь, а просто оказаться бесконечным. Ну или достаточно длинным чтобы сожрать всю память.

В неграмотных руках, кмк, больше шансов вовремя заподозрить что это плохой код, и добавить ограничивающий итератор, чем делать то же самое в случае рекурсии.

Особенно, когда рекурсия не в твоем коде, а, как в данном случае, скрыта внутри regexp.

Ответить | Правка | Наверх | Cообщить модератору

69. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  +/
Сообщение от n00by (ok), 17-Июл-21, 12:50 
> Особенно, когда рекурсия не в твоем коде, а, как в данном случае,
> скрыта внутри regexp.


diff --git a/src/js/document-blocked.js b/src/js/document-blocked.js
index 08b2fd732972..b0034ef3ae87 100644
--- a/src/js/document-blocked.js
+++ b/src/js/document-blocked.js
@@ -144,7 +144,9 @@ uDom.nodeFromId('why').textContent = details.fs;
         return s;
     };

-    const renderParams = function(parentNode, rawURL) {
+    // https://github.com/uBlockOrigin/uBlock-issues/issues/1649
+    //   Limit recursion.
+    const renderParams = function(parentNode, rawURL, depth = 0) {
         const a = document.createElement('a');
         a.href = rawURL;
         if ( a.search.length === 0 ) { return false; }
@@ -165,9 +167,9 @@ uDom.nodeFromId('why').textContent = details.fs;
             const name = safeDecodeURIComponent(param.slice(0, pos));
             const value = safeDecodeURIComponent(param.slice(pos + 1));
             const li = liFromParam(name, value);
-            if ( reURL.test(value) ) {
+            if ( depth < 2 && reURL.test(value) ) {
                 const ul = document.createElement('ul');
-                renderParams(ul, value);
+                renderParams(ul, value, depth + 1);
                 li.appendChild(ul);
             }
             parentNode.appendChild(li);

Ответить | Правка | Наверх | Cообщить модератору

72. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  –1 +/
Сообщение от пох. (?), 17-Июл-21, 13:08 
надо ж, то есть тут регексп был обычный, честная рекурсия на функциях. Ну вот потому и не надо так делать. Особенно ради "depth <2", то есть оно вызывается ровно два раза. Даже цикл не нужен, одного вложенного if хватило бы. фуфуфу так кодить.


Ответить | Правка | Наверх | Cообщить модератору

75. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  +1 +/
Сообщение от n00by (ok), 17-Июл-21, 13:20 
Ну если в _эталонной_ реализации вычисления числа Фибоначчи https://www.opennet.me/opennews/art.shtml?num=55466
злоупотребляют массивом, когда достаточно 2-х переменных, то чего ещё ждать...

Здесь, возможно, глубину оставили, что бы потом поменять на 3 или 5.

Ответить | Правка | Наверх | Cообщить модератору

81. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  –1 +/
Сообщение от пох. (?), 17-Июл-21, 13:45 
ой ;-) return array[num] просто прекрасно.
Кстати, никто ж и не заметил что с этим кодом что-то не так ;-)

Ответить | Правка | Наверх | Cообщить модератору

92. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  +1 +/
Сообщение от n00by (ok), 17-Июл-21, 15:38 
Там даже начали доказывать, что массив -- это правильно. https://www.opennet.me/openforum/vsluhforumID3/124763.html#140
Ответить | Правка | Наверх | Cообщить модератору

98. "Уязвимость в uBlock Origin, приводящая к краху или исчерпани..."  –1 +/
Сообщение от пох. (?), 17-Июл-21, 16:50 
да, я уже просветился. Причем новость-то я читал, где были мои глаза, спрашивается, хотя, конечно, я даже не попытался понять что тот код делает, не это было интересно.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру