1. Список говнокодов пользователя gost

    Всего: 150

  2. C++ / Говнокод #25243

    +2

    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
    // A sample standard C++20 program that prints
    // the first N Pythagorean triples.
    #include <iostream>
    #include <optional>
    #include <ranges>   // New header!
     
    using namespace std;
     
    // maybe_view defines a view over zero or one
    // objects.
    template<Semiregular T>
    struct maybe_view : view_interface<maybe_view<T>> {
      maybe_view() = default;
      maybe_view(T t) : data_(std::move(t)) {
      }
      T const *begin() const noexcept {
        return data_ ? &*data_ : nullptr;
      }
      T const *end() const noexcept {
        return data_ ? &*data_ + 1 : nullptr;
      }
    private:
      optional<T> data_{};
    };
     
    // "for_each" creates a new view by applying a
    // transformation to each element in an input
    // range, and flattening the resulting range of
    // ranges.
    // (This uses one syntax for constrained lambdas
    // in C++20.)
    inline constexpr auto for_each =
      []<Range R,
         Iterator I = iterator_t<R>,
         IndirectUnaryInvocable<I> Fun>(R&& r, Fun fun)
            requires Range<indirect_result_t<Fun, I>> {
          return std::forward<R>(r)
            | view::transform(std::move(fun))
            | view::join;
      };
     
    // "yield_if" takes a bool and a value and
    // returns a view of zero or one elements.
    inline constexpr auto yield_if =
      []<Semiregular T>(bool b, T x) {
        return b ? maybe_view{std::move(x)}
                 : maybe_view<T>{};
      };
     
    int main() {
      // Define an infinite range of all the
      // Pythagorean triples:
      using view::iota;
      auto triples =
        for_each(iota(1), [](int z) {
          return for_each(iota(1, z+1), [=](int x) {
            return for_each(iota(x, z+1), [=](int y) {
              return yield_if(x*x + y*y == z*z,
                make_tuple(x, y, z));
            });
          });
        });
     
        // Display the first 10 triples
        for(auto triple : triples | view::take(10)) {
          cout << '('
               << get<0>(triple) << ','
               << get<1>(triple) << ','
               << get<2>(triple) << ')' << '\n';
      }
    }

    «C++20»: ещё больше модерна! Ещё больше шаблонов! Ещё больше ебанутых конструкций! Ещё больше блядского цирка!
    s: http://aras-p.info/blog/2018/12/28/Modern-C-Lamentations/

    gost, 30 Декабря 2018

    Комментарии (55)
  3. JavaScript / Говнокод #25145

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    setInterval(() => {
        const [x, y] = win.getPosition()
        localStorage.setItem('x', x)
        localStorage.setItem('y', y)
    }, 3)

    s: https://github.com/JsusDev/JS.VPN-Client/blob/master/app/components/vpn/client/index.html

    Охуеть, блядь. Сраная обёртка над однострочным скриптом, написанная на сраном «Электроне», весит сраных 38 мегабайт и каждые три сраных миллисекунды гоняет туда-сюда байты. И это программисты? Это программисты? Говно какое-то, пидоры, блядь. Родина им дала скрипты — пиши, пиши ничего не весящий однострочник! Блядь, не хотим, хотим высирать говно. И даже эта обёртка на «Электроне», единственный смысл в которой — максимальная кроссплатформенность, намертво прибита к бинарникам «OpenVPN» версии 2.4.6. К сраным, блядь, виндовым бинарникам!

    Да, у меня бугурт от настолько лютого говна.

    gost, 04 Декабря 2018

    Комментарии (86)
  4. C++ / Говнокод #25134

    +1

    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
    // HooksList.h
    #define PPCAT_NX(A, B) A ## B
    #define PPCAT(A, B) PPCAT_NX(A, B)
    
    #ifdef HOOKS_DEFS
        using namespace NtStructs;
        #define API_HOOK_DEF(module_name, hook_name, return_type, enabled, ...) \
            typedef return_type(WINAPI *PPCAT(hook_name, _ptr))(__VA_ARGS__); \
            return_type WINAPI PPCAT(hook_name, _hook)(__VA_ARGS__); \
            extern PPCAT(hook_name, _ptr) PPCAT(hook_name, _orig);
    #elif defined(HOOKS_LIST)
        #define API_HOOK_DEF(module_name, hook_name, return_type, enabled, ...) \
            {module_name, #hook_name, (LPVOID)PPCAT(hook_name, _hook), (LPVOID*)&PPCAT(hook_name, _orig), enabled},
    #elif defined(HOOKS_TYPES_DEF)
        using namespace NtStructs;
        #define API_HOOK_DEF(module_name, hook_name, return_type, enabled, ...) \
            typedef return_type(WINAPI *PPCAT(hook_name, _ptr))(__VA_ARGS__); \
            return_type WINAPI PPCAT(hook_name, _hook)(__VA_ARGS__);
    #elif defined(ORIGINAL_FUNCTIONS_TABLE_DEF)
        #define API_HOOK_DEF(module_name, hook_name, return_type, enabled, ...) \
            PPCAT(hook_name, _ptr) hook_name;
    #elif defined(ORIGINAL_FUNCTIONS_TABLE_FILL)
        #define API_HOOK_DEF(module_name, hook_name, return_type, enabled, ...) \
            (ORIGINAL_FUNCTIONS_TABLE_NAME).hook_name = PPCAT(hook_name, _orig);
    #else
        #define API_HOOK_DEF(...)
    #endif
    
    // NtCreateFile
    API_HOOK_DEF(L"ntdll", NtCreateFile, NTSTATUS, true,
                 PHANDLE            FileHandle,
                 ACCESS_MASK        DesiredAccess,
                 POBJECT_ATTRIBUTES ObjectAttributes,
                 PIO_STATUS_BLOCK   IoStatusBlock,
                 PLARGE_INTEGER     AllocationSize,
                 ULONG              FileAttributes,
                 ULONG              ShareAccess,
                 ULONG              CreateDisposition,
                 ULONG              CreateOptions,
                 PVOID              EaBuffer,
                 ULONG              EaLength)
    
    // NtDeleteFile
    API_HOOK_DEF(L"ntdll", NtDeleteFile, NTSTATUS, true,
                 POBJECT_ATTRIBUTES ObjectAttributes)
    // И так далее
    
    // В .cpp:
    static HookEntry hookEntries[] = {
    #define HOOKS_LIST
    #include "HooksList.h"
    #undef HOOKS_LIST
    };
    
    
    // ...
    static OriginalFunctions originalFuncsTable;
    #define ORIGINAL_FUNCTIONS_TABLE_FILL 1
    #define ORIGINAL_FUNCTIONS_TABLE_NAME originalFuncsTable
    #include "HooksList.h"
    #undef ORIGINAL_FUNCTIONS_TABLE_NAME
    #undef ORIGINAL_FUNCTIONS_TABLE_FILL

    Мокросы!..

    gost, 30 Ноября 2018

    Комментарии (4)
  5. C# / Говнокод #25113

    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
    string json = "{" +
                  "\"path\": " + EscapeForJson(path) + "," +
                  "\"cmd\": " + EscapeForJson(cmd) + "," +
                  "\"config\": {" +
                  "\"defaultPerms\": " + defaultPerms.ToString() + ", " +
                  "\"defaultCompPerms\": " + defaultCompPerms.ToString() + ", " +
                  "\"rules\": [";
    foreach (var rule in rules)
    {
        json += "{" +
                "\"path\": " + EscapeForJson(rule.path) + "," +
                "\"perms\": " + rule.perms.ToString() +
                "},";
    }
    
    if (rules.Length != 0)
    {
        json = json.Remove(json.Length - 1);  // remove last ','
    }
    json += "]}}";

    gost, 24 Ноября 2018

    Комментарии (38)
  6. C++ / Говнокод #24844

    −3

    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
    #define m_from(format)			\
    char buff[128];					\
    sprintf(buff, format, value);	\
    data_ = std::string(buff);
    
    inline void fromShort(short value)
    {
        m_from("%i");
    }
    inline void fromInt(int value)
    {
        m_from("%i");
    }
    inline void fromLong(long value)
    {
        m_from("%li");
    }
    inline void fromFloat(float value)
    {
        m_from("%f");
    }
    inline void fromDouble(double value)
    {
        m_from("%f");
    }

    https://github.com/FlightBlaze/Newtoo/blob/master/modules/misc/USVString.h

    Собственно, занесения в аналы ГК достоин весь этот класс целиком.

    gost, 01 Октября 2018

    Комментарии (84)
  7. C++ / Говнокод #24843

    −7

    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
    /*
    Newtoo — разработка полноценного браузерного движка с нуля в 2018?
    Так уж получилось, что в мире есть всего 4 популярных браузерных движка,
    которые настолько сложны, что сами разработчики не знают и половины их
    кодовой базы, и настолько продвинутые по технологиям, что начать их догонять —
    пустая трата времени. 
    
    А так ли это на самом деле? Мой проект создан, чтобы повторить подвиги
    современных браузерных движков и проверить, насколько ли реально создать
    достойную альтернативу крупным проектам, история которых начинается с
    девяностых годов. Мой новый движок создается с нуля, а значит его история
    начинается — сегодня.
    ...
    Те ошибки, которые были допущены на начальных стадиях разработки
    остаются в проекте до конца. Самый яркий пример этому — умные
    указатели в C++ — это еще более сложный синтаксис, большой оверхед
    при работе, создании и удалении умных указателей. Кроме того, есть
    очень много типов умных указателей и нужно знать, какой когда использовать,
    ведь у каждого есть свои сюрпризы ньюансы. Посмотрите на этот файл из
    WebKit. Когда видишь такой код, синтаксис умных указателей, пытаешься
    успокоится и дышать ровно, но такого рода код — это весь вебкит с ног до
    головы. В моем движке нет таких недостатков.
    */
    
    Node* NodeListControlled::insertAt(unsigned long index, Node* child)
    {
        // mControl == vector<Node*>
        mControl.insert(mControl.begin() + index, child);
    
        return child;
    }

    Дело Попова, Бабушкина и иже с ними живёт!

    У умных указателей оверхед большой, а вот List со вставкой за O(n) — это не недостаток, это фича.
    А ещё там NamedNodeMap с тем же линейным поиском и практически полное игнорирование
    передачи по ссылке — компилятор умный, авось, заоптимизирует как-нибудь.

    https://sohabr.net/habr/post/424881/
    https://github.com/FlightBlaze/Newtoo

    gost, 01 Октября 2018

    Комментарии (2)
  8. PHP / Говнокод #24812

    −1

    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
    class MyBigClass
    {
        var $allocatedSize;
        var $allMyOtherStuff;
    }
    
    function AllocateMyBigClass()
    {
        $before = memory_get_usage();
        $ret = new MyBigClass;
        $after = memory_get_usage();
        $ret->allocatedSize = ($after - $before);
    
        return $ret;
    }

    Зачем нам в языке адекватный sizeof, у нас нет времени, чтобы ебаться с ним!

    Подробнее: https://stackoverflow.com/questions/1351855/getting-size-in-memory-of-an-object-in-php

    gost, 25 Сентября 2018

    Комментарии (23)
  9. PHP / Говнокод #24811

    +1

    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
    /**
     * Cast an object into a different class.
     *
     * Currently this only supports casting DOWN the inheritance chain,
     * that is, an object may only be cast into a class if that class 
     * is a descendant of the object's current class.
     *
     * This is mostly to avoid potentially losing data by casting across
     * incompatable classes.
     *
     * @param object $object The object to cast.
     * @param string $class The class to cast the object into.
     * @return object
     */
    function cast($object, $class) {
    	if( !is_object($object) ) 
    		throw new InvalidArgumentException('$object must be an object.');
    	if( !is_string($class) )
    		throw new InvalidArgumentException('$class must be a string.');
    	if( !class_exists($class) )
    		throw new InvalidArgumentException(sprintf('Unknown class: %s.', $class));
    	if( !is_subclass_of($class, get_class($object)) ) 
    		throw new InvalidArgumentException(sprintf(
    			'%s is not a descendant of $object class: %s.',
    			$class, get_class($object)
    		));
    	/**
    	 * This is a beautifully ugly hack.
    	 *
    	 * First, we serialize our object, which turns it into a string, allowing
    	 * us to muck about with it using standard string manipulation methods.
    	 *
    	 * Then, we use preg_replace to change it's defined type to the class
    	 * we're casting it to, and then serialize the string back into an
    	 * object.
    	 */
    	return unserialize(
    		preg_replace(
    			'/^O:\d+:"[^"]++"/', 
    			'O:'.strlen($class).':"'.$class.'"',
    			serialize($object)
    		)
    	);
    }

    Это прекрасно.

    gost, 25 Сентября 2018

    Комментарии (7)
  10. C++ / Говнокод #24805

    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
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <map>
    #include <string>
    
    int main()
    {
        using namespace std::placeholders;
    
        std::map<std::string, int> karta;
        std::vector<std::string> goroda{ "foo", "bar", "foo" };
    
        std::for_each(goroda.begin(), goroda.end(), std::bind(
            static_cast<
                std::pair<decltype(karta)::iterator, bool>
                (decltype(karta)::*)(const decltype(karta)::key_type&, decltype(karta)::mapped_type&&)>
                    (&decltype(karta)::insert_or_assign),
            std::ref(karta),
            _1,
            std::bind(
                std::plus<decltype(karta)::mapped_type>(),
                1,
                std::bind(
                    static_cast<decltype(karta)::mapped_type&(decltype(karta)::*)(const decltype(karta)::key_type &)>
                    (&decltype(karta)::operator[]),
                    std::ref(karta),
                    _1))
        ));
        std::cout << "foo: " << karta["foo"] << "\nbar: " << karta["bar"] << '\n';
        
        return EXIT_SUCCESS;
    }

    #24802, переписанный в функциональном modern C++ стиле.
    Переделать бы ещё это под итераторы, чтобы двух обращений к мапе не было…

    gost, 24 Сентября 2018

    Комментарии (33)
  11. PHP / Говнокод #24800

    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
    // CVE-2012-5692
    
    /* 4015. */        static public function get($name) 
    /* 4016. */        { 
    /* 4017. */            // Check internal data first 
    /* 4018. */            if ( isset( self::$_cookiesSet[ $name ] ) ) 
    /* 4019. */            { 
    /* 4020. */                return self::$_cookiesSet[ $name ]; 
    /* 4021. */            } 
    /* 4022. */            else if ( isset( $_COOKIE[ipsRegistry::$settings['cookie_id'].$name] ) ) 
    /* 4023. */            { 
    /* 4024. */                $_value = $_COOKIE[ ipsRegistry::$settings['cookie_id'].$name ]; 
    /* 4025. */    
    /* 4026. */                if ( substr( $_value, 0, 2 ) == 'a:' ) 
    /* 4027. */                { 
    /* 4028. */                    return unserialize( stripslashes( urldecode( $_value ) ) ); 
    /* 4029. */                } 
    
    /*  
    The vulnerability is caused due to this method unserialize user input passed through cookies without a proper 
    sanitization. The only one check is done at line 4026,  where is controlled that the serialized string starts 
    with 'a:',  but this is not  sufficient to prevent a  "PHP Object Injection"  because an attacker may send  a 
    serialized string which represents an array of objects.  This can be  exploited to execute arbitrary PHP code 
    via the  "__destruct()" method of the  "dbMain" class,  which calls the "writeDebugLog" method to write debug 
    info into a file.  PHP code may  be injected  only through the  $_SERVER['QUERY_STRING']  variable,  for this 
    reason successful exploitation of this vulnerability requires short_open_tag to be enabled. 
    */

    Если вы думаете, что самое плохое, что ждёт ваш уютный сайт на «PHP» — это Роберт-брось-таблицу, то вы глубоко ошибаетесь.

    CSRF verification passed.

    gost, 23 Сентября 2018

    Комментарии (45)