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

    Всего: 338

  2. PHP / Говнокод #23051

    0

    1. 1
    https://web.archive.org/web/20070125181458/http://2ch.ru/s/src/1158095011998.gif

    j123123, 21 Мая 2017

    Комментарии (0)
  3. Assembler / Говнокод #23014

    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
    #define SPLICE(a,b) SPLICE_1(a,b)
    #define SPLICE_1(a,b) SPLICE_2(a,b)
    #define SPLICE_2(a,b) a##b
    #define LL(a,b) SPLICE_2(a,b)
    #define L(a) LL(a,LOC)
    
    
    #define LOC sub1
    .func sub1
    sub1:
        ljmp L(L1)
    
    L(L1):
        nop
    .endfunc
    
    #define LOC sub2
    .func sub2
    sub2:
        ljmp L(L1)
    
    L(L1):
        nop
    .endfunc

    Когда захотел сделать local labels в ассемблере через сишный препроцессор

    j123123, 12 Мая 2017

    Комментарии (55)
  4. Си / Говнокод #22876

    −33

    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
    #include <http://govnokod.ru/21585>
    
    // assembly output for f1_signed and f2_signed on GCC 7,6,5 ... versions are same
    
    signed char f1_signed(signed char a1, signed char a2, signed char a3)
    {
      return MAXS(a1,a2,a3,a1,a2,a3);
    }
    
    signed char f2_signed(signed char a1, signed char a2, signed char a3)
    {
      return MAXS(a1,a2,a3);
    }
    
    // assembly output for f1_unsigned and f2_unsigned on GCC 7,6,5 ... versions are differend
    // GCC compiler can't do same simplification for unsigned function
    
    // This function produces much more assembler code than second
    unsigned char f1_unsigned(unsigned char a1, unsigned char a2, unsigned char a3)
    {
      return MAXS(a1,a2,a3,a1,a2,a3);
    }
    
    unsigned char f2_unsigned(unsigned char a1, unsigned char a2, unsigned char a3)
    {
      return MAXS(a1,a2,a3);
    }

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80574

    Очередной мой багрепорт в GCC. Компилятор GCC может заоптимизировать повторяющуйся в MAXS хрень для signed char, но не может для unsigned
    А вот Clang не может заоптимизировать ни то, ни другое. https://godbolt.org/g/7Kt9X0

    j123123, 30 Апреля 2017

    Комментарии (100)
  5. Си / Говнокод #22875

    −11

    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
    void *memcpy(void *__dest, __const void *__src, size_t __n)
    {
            int i = 0;
            unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
    
            for (i = __n >> 3; i > 0; i--) {
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
            }
    
            if (__n & 1 << 2) {
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
                    *d++ = *s++;
            }
    
            if (__n & 1 << 1) {
                    *d++ = *s++;
                    *d++ = *s++;
            }
    
            if (__n & 1)
                    *d++ = *s++;
    
            return __dest;
    }

    Царский анролл в memcpy, прямиком из ядра Linux

    http://lxr.free-electrons.com/source/arch/arm/boot/compressed/string.c

    j123123, 30 Апреля 2017

    Комментарии (41)
  6. JavaScript / Говнокод #22860

    −11

    1. 1
    https://habrahabr.ru/post/322052/

    Лямбда-исчисление на JavaScript

    j123123, 27 Апреля 2017

    Комментарии (21)
  7. Си / Говнокод #22854

    −16

    1. 1
    https://foxford.ru/wiki/informatika/tipy-tselyh-chisel-yazyka-s

    Вот такая хуйня получается, когда учебные материалы по Си пишут те, которые сами нихуя не знают Си и не читали Священный Драфт Стандарта. Сколько хуйни по ссылке вы можете найти?
    spoiler: https://habrahabr.ru/post/156593/

    j123123, 26 Апреля 2017

    Комментарии (31)
  8. C++ / Говнокод #22815

    −11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    #if HAVE(MERGESORT)
        if (isSortingPrimitiveValues)
            qsort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
        else
            mergesort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
    #else
        // FIXME: The qsort library function is likely to not be a stable sort.
        // ECMAScript-262 does not specify a stable sort, but in practice, browsers perform a stable sort.
        qsort(values.begin(), values.size(), sizeof(ValueStringPair), compareByStringPairForQSort);
    #endif

    Из какой-то древней версии Webkit. Про устойчивость сортировки. Ну типа вот хоть в ECMAScript-262 нихрена не написано про то, что сортировка должна быть устойчивой, мы сделаем ее устойчивой потому что так принято (а то сломаем еще ненароком чей-то говнокод на JS)

    вот еще
    https://bugs.chromium.org/p/v8/issues/detail?id=90
    https://habrahabr.ru/post/303748/

    j123123, 15 Апреля 2017

    Комментарии (15)
  9. Си / Говнокод #22794

    −49

    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
    #include <stdio.h>
    
    void *labels[3];
    
    void test(void *ptr)
    {
        if(ptr == NULL)
        {
          labels[0] = &&l1;
          labels[1] = &&l2;
          labels[2] = &&l3;
          return;
        }
        goto *ptr;
    l1:
        printf("test1\n");
        return;
    l2:
        printf("test2\n");
        return;
    l3:
        printf("test3\n");
        return;
    }
    
    int main(void)
    {
       test(NULL);
       test(labels[0]);
       test(labels[1]);
       test(labels[2]);
    }

    Вот если б можно было делать метки указателей внутри функций видимыми извне, такой фигни б не было

    j123123, 11 Апреля 2017

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

    −14

    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
    #include "string.hpp"
    #include "execute.hpp"
    
    #include <iostream>
    
    using code = decltype(
        "push ebx "
        "pop eax "
        "exit"_s);
    constexpr auto ret_val = cai::execute_code<code>;
    
    int main()
    {
        std::cout << std::hex << ret_val;
        return 0;
    }

    cai::execute_code will parse, tokenize, execute code and return value from eax register. Startup ebx value is 0xbada55. Above program will push ebx to stack and pop from stack to eax. So eax will eventually contain 0xbada55.

    https://github.com/stryku/ctai compile time assembly interpreter

    j123123, 10 Апреля 2017

    Комментарии (25)
  11. C++ / Говнокод #22714

    −16

    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
    void subBytes(uint8_t* block, size_t count) {
    	for (int i = 0; i < count; i++) {
    		size_t x, y;
    		char *temp = new char[2];
    		sprintf(temp, "%02x", block[i]);
    		temp = new char[4]{ temp[0], 0x00, temp[1], 0x00 };
    		x = stoi(temp, 0, 16);
    		y = stoi(temp + 2, 0, 16);
    		block[i] = sBox[x][y];
    		delete[] temp;
    	}
    
    }
    void invSubBytes(uint8_t* block, size_t count) {
    	for (int i = 0; i < count; i += 1) {
    		size_t x, y;
    		char *temp = new char[4];
    		sprintf(temp, "%02x", block[i]);
    		temp = new char[4]{ temp[0], 0x00, temp[1], 0x00 };
    		x = stoi(temp, 0, 16);
    		y = stoi(temp + 2, 0, 16);
    		block[i] = invSbox[x][y];
    		delete[] temp;
    	}
    }

    https://github.com/VenkuSkirata/MyAES/blob/5f9161551f1a743c7ca6b0ebdf492904cc097d8d/AES.cpp#L123-L147

    Тут один человек просил покритиковать его код, нувыпонели

    j123123, 31 Марта 2017

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