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

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

    −133

    1. 1
    2. 2
    3. 3
    4. 4
    for base in main daily bytecode safebrowsing
    do
        test ! -e %sys_clamav/$$base.cvd -o %sys_db/$$base.cvd -nt %sys_clamav/$$base.cvd && yes | cp -f %sys_db/$$base.cvd %sys_clamav/$$base.cvd 2>/dev/null
    done

    post-install скрипт пакета clamav-db (%sys_clamav и %sys_db - макросы, которые раскрывает rpm).

    Альтлинукс. Сириус бзнесс.

    raorn, 06 Декабря 2010

    Комментарии (4)
  3. Perl / Говнокод #4798

    −120

    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
    # Find out what mail program to use !! Terrible kludge !!
      $mailprogram = "/usr/bin/mail";
      if (! -x "$mailprogram") {
        if (-x "/bin/mail") {
          $mailprogram = "/bin/mail";
        } else {
          if (-x "/usr/sbin/sendmail") {
            $mailprogram = "/usr/sbin/sendmail";
          } else {
            if (-x "/usr/lib/sendmail") {
              $mailprogram = "/usr/lib/sendmail";
            } else {
              if (-x "/usr/bin/mutt") {
                $mailprogram = "/usr/bin/mutt";
              } else {
                if (-x "/usr/sbin/exim4") {
                  $mailprogram = "/usr/sbin/exim4";
                } else {
                  if (-x "/usr/bin/elm") {
                    $mailprogram = "/usr/bin/elm";
                  } else {
                    print "Cannot find a mail program to use\n";
                  }
                }
              }
            }
          }
        }
      }

    В changelog автор честно признался, что не знал, как реализовать иначе.

    Anderson, 01 Декабря 2010

    Комментарии (4)
  4. SQL / Говнокод #4795

    −858

    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
    create function is_numeric (
    	@a varchar(100)
    ) returns int as begin
    	declare @retval int
    	set @a = replace(@a, '0', '')
    	set @a = replace(@a, '1', '')
    	set @a = replace(@a, '2', '')
    	set @a = replace(@a, '3', '')
    	set @a = replace(@a, '4', '')
    	set @a = replace(@a, '5', '')
    	set @a = replace(@a, '6', '')
    	set @a = replace(@a, '7', '')
    	set @a = replace(@a, '8', '')
    	set @a = replace(@a, '9', '')
    	set @a = replace(@a, '.', '')
    	if len(rtrim(ltrim(@a))) > 0 set @retval = 0
    	else set @retval = 1
    	return @retval
    end

    Вот такая хитрая скалярная функция была найдена в недрах сопровождаемой системы. Согласно ей "...42...42..." -- это число, такие дела.

    Zebr, 01 Декабря 2010

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

    +70

    1. 1
    2. 2
    3. 3
    4. 4
    if(url.getProtocol().equals("http") || true)
    {
       // ...
    }

    Индийский код добрался и до Android...

    Highlander, 29 Ноября 2010

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

    +145

    1. 1
    return !!$this->db->where('id', $for_id)->update($for, $row);

    ояебал, у них наверное где-то склад с веществами

    DrFreez, 28 Ноября 2010

    Комментарии (4)
  7. Java / Говнокод #4773

    +68

    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
    package bytestring;
    
    public class Main {
    
        public static void main(String[] args) {
            String source = new String("A ya sdelal etu hren s perevorotom stroki s ispolzovaniem bayta");
    
            byte bytes[] = source.getBytes();
    
            ////////////////////////////////////////////////////////////////////////
    
            int i, j;
            int length, first, last;
            byte a;
    
            length = bytes.length;
    
            //Переворачиваем всю строку
            for(i = 0; i < length / 2; i++) {
                a = bytes[i];
                bytes[i] = bytes[length - i - 1];
                bytes[length - i - 1] = a;
            }
    
            //Переворачиваем каждое слово строки
            first = 0;
            for(i = 1; i <= length; i++)
                if(i == length || bytes[i] == ' ') {
                    last = i - 1;
                    for(j = first; j <= first + (last - first) / 2; j++) {
                        a = bytes[j];
                        bytes[j] = bytes[first + last - j];
                        bytes[first + last - j] = a;
                    }
                    first = i + 1;
                }
    
            ////////////////////////////////////////////////////////////////////////
    
            char destination[] = new char[bytes.length];
            for(i = 0; i < bytes.length; i++)
                destination[i] = (char) bytes[i];
    
            System.out.println(String.copyValueOf(destination));
        }
    }

    hedgecrab, 28 Ноября 2010

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

    +159

    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
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    // TODO: use Virtual memory instead of heap!
    #ifndef __CHUNK_H__
    #define __CHUNK_H__
    #include <windows.h>
    #include "../JuceLibraryCode/JuceHeader.h"
    
    class Chunk {
    
    public:
    	enum CHUNK_DIRECTION {CHUNK_UNKNOWN = 0, CHUNK_IN, CHUNK_OUT};
    	Chunk (DWORD ChunkSize, WORD id, CHUNK_DIRECTION chunkDirection);
    	~Chunk ();
    	// override
    	virtual void eventChunkIsEmpty () { 
    		Logger::outputDebugString(T("empty")); 
    	}
    	virtual void eventChunkIsFull () {
    		Logger::outputDebugString(T("full"));
    	}
    	virtual void eventChunkOverrun () {
    		Logger::outputDebugString(T("overrun"));
    	}
    	DWORD getData (WORD *data, DWORD size) {
    		if (data == 0) return 0;
    		if (cs.tryEnter ()) { // if it's true, we locked.. (TODO: check, i'm not sure about that)
    			if (((size + nReadCounter) > nWriteCounter) || size == 0) { cs.exit(); return 0; }
    			memcpy (data, pBuffer + nReadCounter, size*sizeof(WORD));
    			nReadCounter += size;
    			if (nReadCounter == nWriteCounter) { eventChunkIsEmpty() ; nWriteCounter = 0; nReadCounter = 0; }
    			cs.exit ();
    			return size;
    		}
    		return 0;
    	}
    	DWORD putData (WORD *data, DWORD size) {
    		if (data == 0) return 0;
    		if (cs.tryEnter ()) { // if it's true, we locked.. (TODO: check, i'm not sure about that)
    			if ((size + nWriteCounter) > nSize) { eventChunkOverrun(); cs.exit (); return 0; }
    			memcpy (pBuffer + nWriteCounter, data, size*sizeof(WORD));
    			nWriteCounter += size;
    			if (nWriteCounter == nSize ) eventChunkIsFull();
    			cs.exit ();
    			return size;
    		}
    		return 0;
    	}
    	inline DWORD getSize () {
    		return nSize;
    	}
    	// TODO: add check for nWriteCounter?
    	inline bool setSize (DWORD ChunkSize) {
    		if (bExchangeIsActive) return false;
    		nSize   = ChunkSize;
    		// TODO: add result check.
    		pBuffer = (WORD*) realloc ((void*)pBuffer, ChunkSize*sizeof(WORD));
    		if (pBuffer) return true;
    		return false;
    	}
    	inline DWORD getReadCounter () { return nReadCounter; }
    	inline DWORD getWriteCounter () { return nWriteCounter; }
    	juce_UseDebuggingNewOperator
    protected:
    	bool            bExchangeIsActive;
    	CHUNK_DIRECTION cdDirection;
    	DWORD           nSize;
    	DWORD           nWriteCounter;
    	DWORD           nReadCounter;
    	WORD            nChunkId;
    	WORD           *pBuffer;
    	CriticalSection cs;
    };
    #endif
    // EOF
    #include "Chunk.h"
    Chunk::Chunk (DWORD ChunkSize, WORD id, CHUNK_DIRECTION chunkDirection) {
    	bExchangeIsActive = false;
    	cdDirection       = chunkDirection;
    	nSize             = ChunkSize;
    	nWriteCounter     = 0;
    	nReadCounter      = 0;
    	nChunkId          = id;
    	pBuffer           = (WORD*) malloc (ChunkSize*sizeof(WORD));
    	zeromem (pBuffer, ChunkSize*sizeof(WORD));
    }
    Chunk::~Chunk () {
    	if (pBuffer) free (pBuffer);
    }
    // EOF

    Посвящается всем изобретателям велосипедов и просто неудачникам.. :(

    neudachnik, 27 Ноября 2010

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

    +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 cleanUrl( $url ){
    	
    	$new_url = str_replace( " ", "-", $url );
    	$new_url = str_replace( "/", "-", $new_url );
    	$new_url = str_replace( "--", "-", $new_url );
    	$new_url = str_split( $new_url );
    	$new_url = preg_grep( "<[A-Za-z0-9-_]+>", $new_url );
    	$new_url = trim( implode( $new_url ) );
    	$new_url = strtolower($new_url);
    	
    	// Was still getting cases of double hyphens
    	$new_url = str_replace( "--", "-", $new_url );
    	
    	return $new_url;
    	
    }// end function - cleanUrl

    Спасаю "Говнокод.ру" пехапе шедевром.

    Yurik, 27 Ноября 2010

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

    +165

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    if (count($arResult[$j]["DATA"])!=1) $btw_max = count($arResult[$j]); else $btw_max = 0;
    
    				if ($btw_max ==2) $btw_max =1;
    
    
    
    				for ($k=0;$k<$btw_max;$k++){...}

    Суть проблемы, есть массив $arResult[$j]["DATA"], последний элемент которого лишний, его выводить не надо, для этого чувак сделал следующее
    Вместо того, чтобы это значения не добавлять в массив при его заполнении, либо исключив последний элемент при выводе. В общем труЪ говнокод :D

    minnigaliev-r, 21 Ноября 2010

    Комментарии (4)
  11. Pascal / Говнокод #4644

    +112

    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
    sSQLTitle := 'SELECT  CASE WHEN (VTSS.WRKORDNO IS NOT NULL)'
        +' THEN VTSS.WRKORDNO ELSE VTW.WRKORDNO END AS '''+RSNumDok+''','
        +' CASE WHEN (VTSS.GRECNO IS NOT NULL) THEN VTSS.GRECNO ELSE VTW.GRECNO END AS '''+RSSchet+''','
        +' CASE WHEN (VTSS.STYPE IS NOT NULL) THEN VTSS.STYPE ELSE VTW.STYPE END AS '''+RSDocType+''','
        +' CASE WHEN (VTSS.ServD IS NOT NULL) THEN VTSS.ServD ELSE VTW.ServD END AS '''+RSOpen+''','
        +' CASE WHEN (VTSS.BILLD IS NOT NULL) THEN VTSS.BILLD ELSE VTW.BILLD  END AS '''+RSClose+''','
        +' CASE WHEN (VTSS.FULLNAME IS NOT NULL) THEN VTSS.FULLNAME ELSE VTW.FULLNAME  END AS '''+RSClient+''','
        +' CASE WHEN (VTSS.PAYNAME IS NOT NULL) THEN VTSS.PAYNAME ELSE VTW.PAYNAME  END AS '''+RSPlatelwik+''','
        +' CASE WHEN (VTSS.VIN IS NOT NULL) THEN VTSS.VIN ELSE VTW.VIN  END AS '''+RSVIN+''','
        +' CASE WHEN (VTSS.GNUMER IS NOT NULL) THEN VTSS.GNUMER ELSE VTW.GNUMER  END AS '''+RSGosNomer+''','
        +' CASE WHEN (VTSS.HSMANID IS NOT NULL) THEN VTSS.HSMANID ELSE VTW.HSMANID  END AS '''+RSOtvetstv+''','
        +' CASE WHEN (VTSS.LBACK IS NOT NULL) THEN VTSS.LBACK ELSE VTW.LBACK  END AS '''+RSReturn+''','
        +' VTSS.FULLSUMMA AS '''+RSSumItems+''','
        +' VTW.SUMMA AS '''+RSSumWork+'''';
    with DataMdl.adsADODataSet do
      begin
        Active := false;
        if rbAllDate.Checked then
        {$REGION 'Поиск по всем датам'}
          case rgZakazType.ItemIndex of
            0: //поиск по открытым заказ-заявкам
            CommandText:=sSQLTitle
              +' FROM'
              +' (SELECT  VTS.WRKORDNO,'
           (...)
              +' SUM(SUMMA) AS FULLSUMMA'
              +' FROM'
              +' (SELECT GS.WRKORDNO,'
              +' GB.GRECNO,'
              + sSQLCase
              +' CONVERT(varchar(10), GS.ServD, 104) AS ServD,'
              +' CONVERT(varchar(10), GB.BILLD,104) AS BILLD,'
              +' CASE'
              +'	WHEN C.FNAME IS NULL THEN C.LNAME'
              +'	WHEN C.LNAME IS NULL THEN C.FNAME'
              +' ELSE C.FNAME+'' ''+C.LNAME'
              +'	END AS FULLNAME,'
    //          +' C.LNAME + '' '' + C.FNAME AS FULLNAME,'
              +' CS.PNAME AS PAYNAME,'
              +' V.SERIALNO AS VIN,'
              +' V.LicNo AS GNUMER,'
              +' GB.HSMANID,'
              +' CASE WHEN (GS.CREDIT IS NULL)OR (GS.CREDIT <> 1) THEN NULL ELSE '''+RSReturn+''' END AS LBACK,'
              +' GW.NAME,'
              +' SUM(GW.ORDNUM) AS '''+RSQuantity+''','
              +' SUM(GW.ORDNUM)*GW.UNITPR AS SUMMA'
              +' FROM GSAL'+sPostfix+' GS LEFT OUTER JOIN'
              +' GROW'+sPostfix+' GW ON (GS.GSALID = GW.GSALID)  LEFT OUTER JOIN'
              +' GBIL'+sPostfix+' GB ON (GS.GSALID = GB.GSALID) LEFT OUTER JOIN'
              +' VEHI V ON (GS.VEHIID = V.VEHIID) LEFT OUTER JOIN'
              +' CUST C ON (GS.CUSTNO = C.CUSTNO) RIGHT OUTER JOIN'
              +' (SELECT     CustNo, Lname + '' '' + FNAME AS PNAME'
              +' FROM CUST WITH (NOLOCK))'
              +' CS ON (GB.CUSTNO = CS.CUSTNO)'
              +' WHERE (GS.STATUS = ''A'') AND (GW.RTYPE IN (1,2))'  +sSQLWhere
              +' GROUP BY  GW.ITEM, GW.NAME, GW.UNITPR,'
              +' GS.WRKORDNO, GB.Grecno, GS.ServD, GB.BILLD, C.LNAME, C.FNAME,'
              +' CS.PNAME, V.SERIALNO, V.LicNo, GB.HSMANID, GS.CREDIT, GW.RECMTIME, GS.STYPE)'
              +' VTS'
              +' CASE WHEN (GS.CREDIT IS NULL)OR (GS.CREDIT <> 1) THEN NULL ELSE '''+RSReturn+''' END AS LBACK,'
              +' GW.NAME,'
              +' SUM(GW.ORDNUM) AS '''+RSQuantity+''','
              +' SUM(GW.ORDNUM)*GW.UNITPR AS SUMMA'
              +' FROM GSAL'+sPostfix+' GS LEFT OUTER JOIN'
              +' GROW'+sPostfix+' GW ON (GS.GSALID = GW.GSALID)  LEFT OUTER JOIN'
              +' GBIL'+sPostfix+' GB ON (GS.GSALID = GB.GSALID) LEFT OUTER JOIN'
              +' VEHI V ON (GS.VEHIID = V.VEHIID) LEFT OUTER JOIN'
              +' CUST C ON (GS.CUSTNO = C.CUSTNO) RIGHT OUTER JOIN'
              +' (SELECT     CustNo, Lname + '' '' + FNAME AS PNAME'
           
         ...

    ... и так далее. НАПИСАНО ВРУЧНУЮ! Всего 420 строк, 4 подзапроса, связанных через full outer join. 16 тысяч записей 4-x ядерный mssql server обрабатывал таким образом минуты две. Я уж промолчу, как он по строкам в Delphi разбит...
    Два дня врубался, как оно работает, переписал за два часа. 58 строк, включая каждое поле из select с новой строки :)

    artemlight, 16 Ноября 2010

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