1. C++ / Говнокод #27234

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    // https://github.com/WebKit/WebKit/blob/31b77296cf6d85c40313812d9f65a003cf41f440/Source/WebCore/page/Quirks.cpp#L330
    
    bool Quirks::isGoogleMaps() const
    {
        auto& url = m_document->topDocument().url();
        return topPrivatelyControlledDomain(url.host().toString()).startsWith("google.") && url.path().startsWithIgnoringASCIICase("/maps/");
    }
    
    bool Quirks::shouldDispatchSimulatedMouseEvents() const
    {
        if (RuntimeEnabledFeatures::sharedFeatures().mouseEventsSimulationEnabled())
            return true;
    
        if (!needsQuirks())
            return false;
    
        auto doShouldDispatchChecks = [this] () -> bool {
            auto* loader = m_document->loader();
            if (!loader || loader->simulatedMouseEventsDispatchPolicy() != SimulatedMouseEventsDispatchPolicy::Allow)
                return false;
    
            if (isAmazon())
                return true;
            if (isGoogleMaps())
                return true;
    
            auto& url = m_document->topDocument().url();
            auto host = url.host().convertToASCIILowercase();
    
            if (host == "wix.com" || host.endsWith(".wix.com")) {
                // Disable simulated mouse dispatching for template selection.
                return !url.path().startsWithIgnoringASCIICase("/website/templates/");
            }
    
            if ((host == "desmos.com" || host.endsWith(".desmos.com")) && url.path().startsWithIgnoringASCIICase("/calculator/"))
                return true;
            if (host == "figma.com" || host.endsWith(".figma.com"))
                return true;
            if (host == "trello.com" || host.endsWith(".trello.com"))
                return true;
            if (host == "airtable.com" || host.endsWith(".airtable.com"))
                return true;
            if (host == "msn.com" || host.endsWith(".msn.com"))
                return true;
            if (host == "flipkart.com" || host.endsWith(".flipkart.com"))
                return true;
            if (host == "iqiyi.com" || host.endsWith(".iqiyi.com"))
                return true;
            if (host == "trailers.apple.com")
                return true;
            if (host == "soundcloud.com")
                return true;
            if (host == "naver.com")
                return true;
            if (host == "nba.com" || host.endsWith(".nba.com"))
                return true;
            if (host.endsWith(".naver.com")) {
                // Disable the quirk for tv.naver.com subdomain to be able to simulate hover on videos.
                if (host == "tv.naver.com")
                    return false;
                // Disable the quirk for mail.naver.com subdomain to be able to tap on mail subjects.
                if (host == "mail.naver.com")
                    return false;
                // Disable the quirk on the mobile site.
                // FIXME: Maybe this quirk should be disabled for "m." subdomains on all sites? These are generally mobile sites that don't need mouse events.
                if (host == "m.naver.com")
                    return false;
                return true;
            }
            return false;
        };
    
        if (!m_shouldDispatchSimulatedMouseEventsQuirk)
            m_shouldDispatchSimulatedMouseEventsQuirk = doShouldDispatchChecks();
        return *m_shouldDispatchSimulatedMouseEventsQuirk;
    }

    Дааа блядь, давайте в движке браузера захардкодим какие-то говнодомены, что типа вот для них какая-то там блядь симуляция событий мыши работала каким-то таким образом. Охуенно!

    Запостил: j123123, 04 Февраля 2021

    Комментарии (96) RSS

    • Пиздец
      Ответить
    • Гуглобляди соснули! Я никогда даже хромиум не юзаю, не то что хром. Эта питушатня знаменита ещё тем, что отправляет данные про всякое тоже только определённым захардкоженным сайтам в специально отведенных для этого заголовках которых нет в стандарте, и в основном это поддомены гугла. Делает она это и со всеми галочками сесурити, и в приватном режиме. Ну, и учитывая способ встраивания гугл рекламы, аналитики и капчи, можете себе представить какую новую нефть качает корпорация добра. Я в жопу ебал мать каждого сотрудника гугл кроме романа кашицина.
      Ответить
      • Роман Кашицин уже не сотрудник гугла.
        Ответить
        • Уволился, когда увидел насколько зашкварный код там пишут
          Ответить
        • Я в общем и целом сказал, как про типажи. Есть люди, к которым не прилипает и которые действительно для жизненного опыта могут пощупать и такое, не став говном. Но это редкость и большой талант.
          Ответить
          • Почему ты сравшиваешь с говном любого рядового сотрудника гугла?
            Ему что сказали, то он и делает. Или зашкварно идти в гугл только потому, что они собирают бигдату и качают нефть, а не потому, что пишут говнокод?
            Ответить
            • Потому что я идеалист, и явно не капиталистического толка. У нас при капитализме как было: черпак сам живёт, и другим не мешает жить. Ну всё. А должно как быть. Служишь корпорациям — по дыхалке получаешь. В гугле работаешь — вообще, блять, убью, нахуй.

              Мысль ясна?
              Ответить
              • Страшно с тобой бухать идти.
                Ответить
              • А какого толка?)
                Ответить
                • Пол потовского же
                  Ответить
                • [желтый]смолтолка[/синий]

                  Ну мать сыра на вкус как^H^H^H^H^H^H^H^H^H^H земля советует мне быть анархистом, у нас здеся всё-таки родина Бакунина.

                  Но я искусствоцентричен, и все измышления на этот счет, которые могут звучать категорически (aka взять всё и поделить), касаются в моем случае в основном культурных явлений. В пизду буржуазное искусство! на хую я видал индустрии (спотифай, оскар, грэмми, тренды ютуба). Капитал имеет неудержимую тенденцию впитывать, поглощать, скупать, возглавлять и порнографизировать то, что в какой-то момент времени называется "контркультурой", т.н. андеграунд и т.н. авангард во всех их проявлениях, ну и вот на мой взгляд задача приличного человека не сокрушаться от этого впитывания, но всегда оставаться на переднем крае, в бета-версии жизни во всех её проявлениях. Повторяю, как говорил Мераб Мамардашвили, человек есть стремление быть человеком.
                  Близкий мне авангард — духовический: юродство, пахом, московский концептуализм и акционизм, мамонов, лаэртский, летов, глухов, мавроматти и всё такое.

                  cancel culture — говно, педерасня — говно, феминизм — говно, проект западного человека — это проект раба с десятью видами жевачки, негры — говно. Но это только в духовных пространствах проявляется, я ж не идиот.
                  Ответить
    • > // FIXME: Maybe this quirk should be disabled for "m." subdomains on all sites? These are generally mobile sites that don't need mouse events.

      Таким умникам нужно давать пиздюлей.
      Ответить
      • Пиздец.
        Ответить
      • Хром стал стандартом де факто и ведёт себя как когда-то интернет эксплорер. Чо, стандарт? Не, мы фичу придумали, у нас будут мигать буквы по високосным годам
        Ответить
      • Потом будут менять поддомен с «m» на «mob».
        Ответить
    • Как похорошел Хром при Собянине
      Ответить
    • напоминает шимы в винде


      когда ты старый кусок дефакто, твоя задача сделаь так, чтобы в тебе работали ВСЕ

      Если кто-то не работает -- этотвоя проблема

      вот и фиксят, как могут
      Ответить
      • Ну если пользователи figma, trello, soundcloud и msn уходят с хрома из-за неправильной симуляции событий мыши, то вот и подкостылить можно.
        Ответить
        • Зачем симулировать события мыши?
          Ответить
          • у девушек спроси
            Ответить
            • А какие события мыши симулируют девушки??
              Ответить
              • Покрути колёсико и узнаешь~

                \\u\w\u\\
                Ответить
                • Пнятненько

                  https://www.gearfuse.com/wp-content/uploads/2010/02/gspotmouse1.jpg
                  Ответить
                  • NSFW
                    я тут сижу спиной к коридору
                    Ответить
                    • Странная планировка, имхо. Почему бы не повернуть стол чтобы сидеть спиной к стене?
                      Ответить
                      • Это временно для созвона пересаживался
                        Ответить
                        • Ну всё, теперь ты зашкварился созвоном с менеджерами и будешь всегда сидеть в корридорном углу...
                          Ответить
                          • > созвоном с менеджерами
                            - может, у него было благословенное собеседование

                            > в корридорном углу
                            - это там, где коррида проводится?
                            Ответить
                            • > благословенное собеседование

                              Программисту не по понятиям заниматься чем-то кроме программирования, для этого есть каста менеджеров.

                              > > в корридорном углу

                              Я имел в виду в «колидорном», конечно же, просто опечатался!
                              Ответить
                              • да, видел я такие конторы, где менеджеры проводили все подряд собеседования

                                в таких местах всё равно, куда спиной сидеть - везде один длинный калидор
                                Ответить
                        • ты заходишь в опенспейс, а тебе показывают на стол, повернутый к коридору - вот здесь будешь жить. твои действия?
                          Ответить
                          • Поздняк метаться, ведь ранее ты уже успел с джуном за руку поздороваться. Придётся терпеть.
                            Ответить
                          • Это в какой момент? Когда со старого места ушел?
                            Ответить
                          • приходишь в компанию на собес, видишь, что там опенспейс, говоришь "спасибо, до свидания", уходишь

                            не благодари
                            Ответить
                • тачпоинт тогда уже
                  Ответить
    • А PR со своим сайтом они принимают? Давайте govnokod добавим )))
      Ответить
      • не получится, никто в здравом уме на говнокоде из хрома не сидит
        Ответить
        • Никто в здравом уме на говнокоде не сидит.
          Ответить
        • зачем сидеть в быстром и стабильном хроме, когда можно сидеть в глючном и виснущем файрфоксе?
          Ответить
    • я даже не знаю, кто тут хуже, разрабы хуюгл хрома, которые всеми силами пытаются заставить говносайты работать, или разрабы этих самых говносайтов, которые настолько долбоебы, что чтобы их долбоебизм исправить надо патчить браузер
      Ответить
      • Хех. Отныне эти долбоёбы (разрабы сайтов) должны будут уметь работать в обоих режимах )))
        Ответить
        • пусть домен меняют, лол
          Ответить
          • Какой багор )))
            Ответить
          • Чувак, ты реально крэйзи.
            Ответить
          • Смех смехом, а в IE вполне можно было попасть в список хуёвых сайтов (по-умолчанию будет юзаться древний движок вместо совместимого со стандартами).
            Ответить
      • > я даже не знаю, кто тут хуже, разрабы хуюгл хрома, которые всеми силами пытаются заставить говносайты работать

        Там кстати еще есть хуйня, которая явно из-за багов в самом браузере. В том же файле
        https://github.com/WebKit/WebKit/blob/31b77296cf6d85c40313812d9f65a003cf41f440/Source/WebCore/page/Quirks.cpp#L1258
        
        
            // MLB.com sets a black background-color on the :backdrop pseudo element, which WebKit does not yet support. This
            // quirk can be removed once support for :backdrop psedue element is added.


        Но есть и явные костыли для всяких популярных сайтов, типа чтоб вот эта конкретная хуйня тут работала особым образом
        https://bugs.webkit.org/show_bug.cgi?id=220581
        https://bug-220581-attachments.webkit.org/attachment.cgi?id=417553&action=diff&format=raw&headers=1
        +
        +        Facebook pauses video in PiP during scroll
        +        https://bugs.webkit.org/show_bug.cgi?id=220581
        +        <rdar://67273166>
        +
        +        Reviewed by NOBODY (OOPS!).
        +
        +        Add a Quirk which blocks Facebook from pausing videos in Picture-in-Picture mode without that
        +        pause() occurring during a User Gesture. This blocks Facebook from pausing a PiP'd video when
        +        the <video> element hosting that video scrolls out of the viewport, without blocking Facebook's
        +        own custom pause control from working correctly.
        +
        +        * html/MediaElementSession.cpp:
        +        (WebCore::MediaElementSession::playbackPermitted const):
        +        * page/Quirks.cpp:
        +        (WebCore::Quirks::requiresUserGestureToPauseInPictureInPicture const):
        +        * page/Quirks.h:
        +
        Ответить
        • Так что вот такая хуйня получается. Не только всяким фронт-энд питузам приходится адаптировать свою говноверстку под всякие говнобраузеры, но и говнобраузеры у себя в коде содержат говнокостыли для всяких говносайтов
          Ответить
          • Прямо как сижка и процецари
            Ответить
            • как жопаскриптишка и процецари тоже
              Ответить
              • И коньфелляторы
                Ответить
                • Имелась ввиду история про плавающего петуха.

                  В джаваскрипте целые числа хранятся педерастически, потому что сам язык был разработан педерастами и для передерастов.

                  Авторы ARM сделали для этого целую инструкцию с поэтичным названием FJCVTZS

                  https://stackoverflow.com/questions/50966676/why-do-arm-chips-have-an-instruction-with-javascript-in-the-name-fjcvtzs
                  Ответить
        • >Reviewed by NOBODY
          лол

          >mutable Optional<bool>
          блядь ну и говно
          Ответить
        • А прикиньте как было б охуенно, если б в компиляторы крестоговна такую хуйню добавили, что если ими компилить какую-то определенную хуйню (чтоб еще это какими-то говноэвристиками детектить, типа агааа кажется это мы компилируем вот этот проект) то вот такое-то UB становится не UB а вполне себе понятно чем, а вот тут мы специально отходим от стандарта, иначе это говно не собирается. Вот это багор так багор!
          Ответить
          • Надо посмотреть сорцы гцц, может ьам есть какой-нибудь if (isLinux()).
            Ответить
          • Не удивлюсь, если во всяких msvc такое есть.

            В гцц вряд ли, они скорее нассут на неудачника, чем будут костыль втыкать или оптимизацию менее агрессивной делать. Даже Линус их не убедил в своё время.
            Ответить
            • Вообще в GCC есть хрень для каких-то там совместимостей c msvc
              https://stackoverflow.com/a/56554568

              ну и в Clang специально какие-то костыли добавляли, чтобы им вижуалстудиевский диалект C++ компилировать.
              https://clang.llvm.org/docs/MSVCCompatibility.html

              > MSVC allows many invalid constructs in class templates that Clang has historically rejected. In order to parse widely distributed headers for libraries such as the Active Template Library (ATL) and Windows Runtime Library (WRL), some template rules have been relaxed or extended in Clang on Windows.
              Ответить
              • Ну диалект это всё-таки немного другое, чем под конкретную прогу костыли лепить.

                Хотя вот поддержка ATL -- уже рядом, костыль ради конкретной либы.
                Ответить
                • показать все, что скрытоАхтунг! Уир верден ангегриффен!

                  p.s. Говно снова всплыло? В связи с потеплением, или есть другая, более достойная причина? Скажи, не стыдно ли тебе, за непацанское, скажем так, поведение?
                  Ответить
                • Ахтунг! Уир верден ангегриффен!

                  p.s. Говно снова всплыло? В связи с потеплением, или есть другая, более достойная причина? Скажи, не стыдно ли тебе, за непацанское, скажем так, поведение?
                  Ответить
            • >даже Линус
              ты про memmove?:)
              Ответить
              • Про memmove, про выкидывание проверок на NULL если его уже разадресовали... Вроде ещё какие-то более мелкие срачики были.
                Ответить
                • Хватит изголяться над бедными слоями населения.
                  Ответить
                • расскажи про проверку

                  по идее же если я уже разыменовал укозатель, а брат всё еще жив, то там стопудово не нул

                  какие тут могут быть сомнения?

                  Я могу представить архитектуру, где разыменовывание нула (не ноля, лол, а именно NULL) допустимо, но в сишке то всё равно будет UB
                  Ответить
                  • Так вышло, что можно было подмапать страничку на нулевой виртуальный адрес (бага).

                    Кто-то криво написал драйвер и попытался прочитать поле до проверки (другая бага).

                    Это безобидное кеширование поля не упало за счёт подмапанной странички. Но благодаря ему гцц выкинул все последующие проверки. А за ними были косвенные вызовы и т.п. Которыми и воспользовались для повышения привилегий.
                    Ответить
                    • хм, то есть в таблице страниц по адресу 0 была страница? А это вообще законно на x86?
                      Ответить
                      • С точки зрения железа -- вполне законно. Ему насрать на твои заморочки со специальными значениями.

                        ARM'ы вон вообще грузятся с нуля.
                        Ответить
                        • понятно. Я бы на месте интела такое запретил, но теперь уже поздно.
                          Физическая память должна конечно с ноля адресовываца, а виртуальная это почти наверняка лажа.

                          А на месте операционок я запретил бы мапить туда, и.. минуточку:
                          mmap_min_addr

                          Я кстати нашел багор
                          https://bugzilla.kernel.org/show_bug.cgi?id=14416
                          Ответить
                          • Ну тут явные 2 баги были в ядре. Просто без UB'тимизации они бы не превратились в дыру для атаки.
                            Ответить
                            • а можно попросить компилятора сообщать о выкидыуваемом коде?
                              Ответить
                              • В шланге вроде есть такой режим.
                                Ответить
                                • вообще странно, что в других нет.

                                  Я только что проверил: если я разыменую питуха, а затем проверю его на null, то при -O3 (ну вероятно и при O2) проверка будет выкинута.

                                  clang что-то там вяло помямлил про поссибл нулл, а gcc вообще промолчал даже со стеной

                                  Почему нельзя такие штукенции писать в ворнинги?
                                  Типа: the following condition is always "true"
                                  питух бы быстрее нашел проблему

                                  Это конесно не всенла проблема, я могу проверять какой-то ключ компиляции, но писать про это нужно
                                  Ответить
                                  • > Почему нельзя такие штукенции писать в ворнинги?

                                    А потому что 99% таких ситуаций возникает как последствия инлайна, а не в пределах одной функции.

                                    Ну т.е. есть функция, которая не проверяет указатель на NULL. В общем-то и не обязана, конпелятор её контракт не знает.

                                    Она зовёт другие функции, в которых есть проверка на NULL. В общем-то тоже ничего плохого.

                                    И тут мы начинаем их инлайнить в первую функцию и видим, что проверки то лишние (согласно понятию NULL в стандарте). Можно бы и оптимизнуть.

                                    Жопа в том, что оптимизатору очень сложно отличить такую ситуацию от очевидного бага, он же не знает твои контракты. Поэтому он обычно не ворнингует.
                                    Ответить
                                    • Ну окей, пусть это будет не ворнинг, а хвастовство:

                                      чувак, в результате оптимизации мне удалось доказать, что вот этот вот код нахуй не нужен! Ща я его выкину!
                                      Ответить
                                      • > удалось доказать, что вот этот вот код нахуй не нужен

                                        Дык удалось доказать в данном конкретном случае, а про другие 100500 применений он ничего не знает.

                                        Это мусор, а не предупреждение, его просто отключат и забудут. Мусорные ворнинги -- это очень плохо.
                                        Ответить
                                        • хм, ну вообще если это мелкое выражение, которое заинлайнилось в 100500 мест, и из них 100400 прооптимизировалось, то наверное ты прав
                                          Ответить
                          • Ну а в целом, NULL -- это просто такое особое значение, которым мы помечаем "пустые" указатели. Чтобы делать опциональные объекты или указывать на конец списка, к примеру. Можно ли его разадресовать или нет, в общем-то, тут совершенно неважно. В кольцевом списке, к примеру, в качестве такого значения часто юзается &head, а не NULL.

                            Есть много других адресов, которые мне нельзя или бессмысленно разадресовывать, казалось бы, зачем отдельное правило для NULL?

                            А всё просто, UB про разадресацию NULL'а добавлен в стандарт исключительно для того, чтобы убирать проверки на него во время глубокого инлайна.
                            Ответить
                            • Ну си (и другим языкам) часто нужен такой указатель, разыменование которого это ВСЕГДА ошибка.

                              Почему не помочь компилтору, и не сделать эту штуку железной?
                              Сразу станет безопаснее, не?
                              Ответить
                              • А всё просто. С точки зрения проца (а не стандарта) сам NULL редко кто разыменовывает. Чаще разыменовывают какие-то поля, которые могут иметь ненулевой оффсет. Поэтому чтобы стало безопаснее, надо защищать целую область, а не один конкретный адрес. И размер этой области определяется эмпирически, т.е. от балды.

                                Поэтому разрабы проца сами в это говно не лезут, а просто дают какой-то способ создать эту защитную зону. Размапать странички, к примеру, или запретить к ним доступ через MPU.
                                Ответить
                                • хехе, понял.

                                  >MPU
                                  извини, я не поинтеловски не разговариваю) Хотя в режиме сегментации наверное можно говорить про MPU.

                                  Проще всего наверное запретить что либо мапить в нижнюю область пожертвовав парой мегабайт. Тогда попытка чото там разыменовать всегда будет приводить к фолту

                                  Ответить
                                  • Х.з., по-моему проц не должен лезть во всё это. Его задача -- дать разрабам оси и конпеляторов инструменты, которыми они смогут выразить нужные им концепции. А дальше пусть сами ебутся.

                                    0 ведь не единственная защитная зона. Они есть ещё вокруг стеков и т.п.
                                    Ответить
                                    • стеки вроде канарейками обкладывают?

                                      >по-моему проц не должен лезть во всё это.
                                      ну изначально интел очень даже везде лез, предлагая даже хардварно таски переключать, и каждой таске по куче своих сегментов. Но потом забил, да
                                      Ответить
                                      • Канарейками фреймы внутри стека обкладывают. А сам стек обложен размапанными страницами.
                                        Ответить
                                        • типа фрейм легко запороть незаметно, и потому там канарейка, а стек растет навстречу куче, и перед ним пустота, и поззади него тоже?
                                          Ответить
                                          • > растёт

                                            Ага, именно поэтому в винде есть костыль chkstk, который в функциях где дохрена локалок аккуратно тыкает палчокой в каждую страницу стека по порядку. Иначе вместо роста стека получится сегфолт.

                                            Там первая размапанная страничка наращивает стек при обращении, а вторая (и последующие?) просто крашат прогу.
                                            Ответить
                                            • Ага, а можно вроде еще поставить гард пейдж, и самому узнать о вырастании стека. Вроде и винда и прыщи так умеют.

                                              Я за с89: там размер стека можно было знать заранее, и ровно столько для него выделить места, сколько нужно.
                                              Ответить
    • вот так атсос
      https://blog.usejournal.com/how-i-stole-the-data-in-millions-of-peoples-google-accounts-aa1b72dcc075
      Ответить
    • Какие-то ненужные сайты.
      Ответить
    • На самом деле я не мартышка. Мартышки с хвостом, а шимпанзе или бонобо (который у меня на аватаре) это гоминид.

      Разница между мартышкой гоминидом примерно такая же, как между программистом на PHP и на любом другом языке.

      Возможно, мне следует поменять аватар или сменить ник
      Ответить
      • Главное, пароль поставь как обычно, и всё будет хорошо
        Ответить
    •                                        Achtung!                                          

      Wir werden angegriffen! Alle posten besetzen. Ich wederchole: wir werden angegriffen!
      Ответить

    Добавить комментарий