1. Лучший говнокод

    В номинации:
    За время:
  2. C++ / Говнокод #8119

    +154

    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
    class Allocator
    {
    public:
      
      virtual void *Alloc (size_t) = 0;
      virtual void Dealloc (void *) = 0;
    
      struct Allocation
      {
        Allocator *m_pAllocator[1];
    
        static void Dealloc (void *ptr)
        {
          if (ptr)
            ((Allocator **)ptr)[-1]->Dealloc (((Allocator **)ptr)-1);
        }
      };
    };
    
    class UsesAllocator
    {
    public:
      void *operator new (size_t aSize,Allocator &aAllocator)
      {
        Allocator::Allocation *pResult =
          (Allocator::Allocation *)
          aAllocator.Alloc (aSize+sizeof (Allocator::Allocation));
        if (!pResult) throw std::bad_alloc ();
        pResult->m_pAllocator[0] = &aAllocator;
        return pResult->m_pAllocator+1;
      }
    
      void *operator new [] (size_t aSize,Allocator &aAllocator)
      {
        Allocator::Allocation *pResult =
          (Allocator::Allocation *)
          aAllocator.Alloc (aSize+sizeof (Allocator::Allocation));
        if (!pResult) throw std::bad_alloc ();
        pResult->m_pAllocator[0] = &aAllocator;
        return pResult->m_pAllocator+1;
      }
    
      void operator delete (void *ptr,Allocator &)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete (void *ptr)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete [] (void *ptr,Allocator &)
      { Allocator::Allocation::Dealloc (ptr); }
    
      void operator delete [] (void *ptr)
      { Allocator::Allocation::Dealloc (ptr); }
    };
    ...
    
    class MyClass: /*virtual*/ public UsesAllocator
    {
    public:
      ...
    };
    ...
    MyClass *PROFIT = new (allocatorOfOurInterest) MyClass (...);

    http://www.gamedev.ru/flame/forum/?id=153274

    >Посоны! Оказывается, оператор new можно перегружать!

    ohlol, 08 Октября 2011

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

    +156

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    (function () {
    	var backgroundPosition = getComputedStyle(document.querySelector('a.comment-vote-on')).backgroundPosition;
    	Array.prototype.forEach.call(
    		document.querySelectorAll('span.comment-vote-on'), 
    		function (element) {
    			element.style.backgroundPosition = backgroundPosition;
    		}
    	);
    })()

    По просьбам телезрителей публикуется букмарклет невинности,
    который избавляет от необходимости фотошопить скриншот для иллюстрации заявлений типа "Это не я мину совал!".
    Я ленив, поэтому говнокод тоже присутствует.

    bugmenot, 14 Июля 2011

    Комментарии (51)
  4. PHP / Говнокод #7215

    +168

    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
    function WikiExtractArticleUrl($str) { // Декодирование кирилицы из урла
     
        ErrorsOff(); // отключаем вывод ошибок нашего обработчика, дабы iconv не сорил
     
        try { // пытаемся с помощью iconv перекодировать кирилицу из утф8 в сп1251, подсунув декодированную кирилицу (из %12%%2D  и т.д.)
            $text = iconv('UTF-8', 'CP1251', rawurldecode($str));
            throw new Exception(''); // создаем новое исключение, дабы похапэ отстал от нас
        } catch(Exception $e) { // ловим ошибку iconv, типа перекодировать не надо
            $text = urldecode($str); // тупо декодируем
        }
     
        ErrorsOn(); // выключаем ошибки и возвращаем результ
     
        return $text;
     
    }

    Функция для получения крилицы из ЧПУ урла (сайт в кодировке win1251).

    Мартин, 09 Июля 2011

    Комментарии (51)
  5. PHP / Говнокод #6963

    +154

    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
    include "./include/db.conf.php";
    $con = mysql_connect($DB["host"],$DB["user"],$DB["pass"]) or die ("could not connect:".mysql_error());
    mysql_set_charset('utf8');
    mysql_select_db($DB["dbName"]) or die ("could not connect:".mysql_error());
    
    $hash = $_GET['hash'];
    $login = $_GET['login'];
    echo "SELECT id FROM reg WHERE log = '".$login."' AND hash = '".$hash."'";
    
    $query = mysql_query("SELECT id FROM reg WHERE log = '".$login."' AND hash = '".$hash."'") or die ("MYSQL error".mysql_error());
    
    if ($query) {
        while($row = mysql_fetch_array($query)) {
        echo row['id'];}
                
    $query = mysql_query("UPDATE reg SET commit=1 WHERE id=".row['id'])
         or die ("MYSQL error".mysql_error());}

    Знакомая поделилась шедевром. Так, конечно, можно... но в общем комментарии излишни.
    Да, форматирование оригинала сохранено.

    0rt, 16 Июня 2011

    Комментарии (51)
  6. PHP / Говнокод #6758

    +173

    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
    if(  ( (!empty($HTTP_COOKIE_VARS["lang"])) and ($_POST["lang"] != "") )
    or ( (empty($HTTP_COOKIE_VARS["lang"])) and ($_POST["lang"] != "") ) )
    {
    	setcookie ("lang","",time()+(60*60*24*30),"","");
    	setcookie ("lang",$_POST["lang"],time()+(60*60*24*30),"","");
    	$lang = $_POST[lang];
    }
    
    if ( (empty($HTTP_COOKIE_VARS["lang"])) and (!isset($_POST["lang"])) )
    $lang = $def_language;
    
    if ( (!empty($HTTP_COOKIE_VARS["lang"])) and (!isset($_POST["lang"])) )
    $lang = $HTTP_COOKIE_VARS["lang"];

    Самый ужасный скрипт который встречал когда либо, joker board. и автор просит за него приличную сумму денег! Там код хоть целиком сюда вставляй...

    zigzagkms, 26 Мая 2011

    Комментарии (51)
  7. Perl / Говнокод #6482

    −116

    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
    #!/usr/bin/perl -w
    
    @arr=<>;
    
    @arr=reverse(@arr);
    $ac=$#arr+1;
    print "array size $ac\n";
    @arr = sort { $a <=> $b } @arr;
    while($ac>2){
      $ac=$#arr+1;
    print "size $ac";
      print "reverse \n@arr\n\n";
    if(!exists($arr[$ac])){
    $eln=$ac-1;
    print "\nDelete element $arr[$eln] $eln und $arr[$ac] $ac\n";
      splice @arr, $ac-2,2;
    };
    };

    Скрипт на perl

    AliceGoth, 26 Апреля 2011

    Комментарии (51)
  8. Pascal / Говнокод #5609

    +92

    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
    I:=1;
        while I<=High(Sockets) do
         begin
          if FD_IsSet(Sockets[I],FDSet) then
           if Recv(Sockets[I],…)<=0 then
            begin
             // Связь разорвана, надо закрыть сокет
             // и удалить его из массива
             CloseSocket(Sockets[I]);
             for J:=I to High(Sockets)-1 do
              Sockets[J]:=Sockets[J+1];
             Dec(I);
             SetLength(Sockets,Length(Sockets)-1)
            end
           else
            begin
             // Получены данные от клиента, надо ответить
             Send(Sockets[I],…)
            end;
          Inc(I)
         end;

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

    TarasB, 09 Февраля 2011

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

    +170

    1. 1
    2. 2
    $fh = fopen($filename, r);
    while(($str = fread($fh, 1024)) != null) $fsize += strlen($str);

    Вот так теперь в PHP принято определять размер файла.

    Sandro, 30 Ноября 2010

    Комментарии (51)
  10. JavaScript / Говнокод #3403

    +165

    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
    <div style="font-size:30px; text-align: center;padding-top: 50px;">Число установок принципиально новой OS<br><b><span id="installCount">10324435</span></b></div>
            <script type="text/javascript">
            var memCount = 10584471;
            var memPerSec = 1.38176367782;
            function updateCount() {
              next = -(1000 / memPerSec)*Math.log(Math.random());
              memCountString = '' + memCount;
              len = memCountString.length;
              memCountString = memCountString.substr(0,len-6)+'<span style="font-size:30px"> </span>'+memCountString.substr(len-6,3)+'<span style="font-size:30px"> </span>'+memCountString.substr(len-3,3);
              document.getElementById('installCount').innerHTML = memCountString;
              memCount = memCount + 1;
              setTimeout(updateCount, next);
            }
            updateCount();
            </script>

    Помните на сайте знаменитой , принципиально новой http://bolgenos.ru/ есть табло сколько человек скачало ?
    Выше скрипт ЩИТалки :)
    Мало того что обман , так ещё и кривой

    TIMHOK, 05 Июня 2010

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

    +144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    void main(void)
    {
      int s, e, x, y, n, i, g, e, r, s;
      // действия с вышеобъявленными переменными
      return;
    }

    Max ID, 21 Мая 2010

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