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

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

    +57

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    template <class T>
    T checked_signed_add(T a, T b) {
        if (a >= 0) {
            if (b >= 0 && std::numeric_limits<T>::max() - a < b)
                throw std::runtime_error("Integer overflow");
        } else {
            if (b < 0 && std::numeric_limits<T>::min() - a > b)
                throw std::runtime_error("Integer overflow");
        }
        return a + b;
    }

    Кресты. Знаковые числа. Сложение.

    http://ideone.com/qxyAoG

    bormand, 06 Февраля 2015

    Комментарии (33)
  3. Куча / Говнокод #17582

    +137

    1. 1
    2. 2
    3. 3
    4. 4
    Чуваки! Ну не надо постить уныние. Да, тупой goto, или куча вложенных ifов, или тупой css - это клёво, но в остроумии поупражняться особо желающих, как правило, не бывает - а ведь комменты ценны более всего.
    Я бы тут ещё паучка нарисовал, но я уже в пижаме. 
    
    алсо, никто не работал с j2me-polish? (да, я некрофил)

    bakagaijin, 05 Февраля 2015

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

    +104

    1. 1
    2. 2
    3. 3
    4. 4
    if(number / 2 == ((int)number / 2))
    {
    ...
    }

    Проверка на чётность.

    yaguarvl, 27 Января 2015

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

    +169

    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
    function
    enc($str,$k)//$str - входная строка, $k - ключ от 0 до f
    {
    $m=floor(strlen($str)/2);
    $a=strrev(substr($str,0,$m));
    $b=strrev(substr($str,$m));
    $c=$a.$b;
    $s=bin2hex($c);
    switch($k)
    {
    case '0':$c0='h';$c1='y';$c2='j';$c3='z';$c4='i';$c5='g';$c6='x';$c7='k';$c8='s';$c9='w';$ca='p';$cb='l';$cc='q';$cd='m';$ce='v';$cf='t';break;
    case '1':$c0='u';$c1='k';$c2='x';$c3='m';$c4='s';$c5='w';$c6='r';$c7='z';$c8='q';$c9='t';$ca='g';$cb='v';$cc='o';$cd='y';$ce='n';$cf='i';break;       
    case '2':$c0='i';$c1='u';$c2='n';$c3='k';$c4='y';$c5='x';$c6='o';$c7='m';$c8='q';$c9='s';$ca='g';$cb='v';$cc='w';$cd='r';$ce='t';$cf='z';break;
    case '3':$c0='k';$c1='j';$c2='z';$c3='x';$c4='q';$c5='s';$c6='n';$c7='i';$c8='l';$c9='r';$ca='g';$cb='p';$cc='w';$cd='y';$ce='v';$cf='m';break;
    case '4':$c0='m';$c1='g';$c2='p';$c3='t';$c4='i';$c5='l';$c6='r';$c7='s';$c8='n';$c9='q';$ca='k';$cb='j';$cc='h';$cd='u';$ce='z';$cf='v';break;
    case '5':$c0='q';$c1='i';$c2='u';$c3='z';$c4='t';$c5='n';$c6='k';$c7='r';$c8='w';$c9='y';$ca='x';$cb='v';$cc='g';$cd='o';$ce='m';$cf='s';break;
    case '6':$c0='s';$c1='l';$c2='h';$c3='i';$c4='t';$c5='k';$c6='r';$c7='q';$c8='o';$c9='v';$ca='w';$cb='x';$cc='n';$cd='u';$ce='p';$cf='j';break;
    case '7':$c0='s';$c1='j';$c2='l';$c3='p';$c4='u';$c5='h';$c6='i';$c7='n';$c8='x';$c9='t';$ca='k';$cb='w';$cc='v';$cd='r';$ce='q';$cf='o';break;
    case '8':$c0='o';$c1='s';$c2='q';$c3='j';$c4='l';$c5='r';$c6='v';$c7='p';$c8='u';$c9='w';$ca='h';$cb='k';$cc='t';$cd='i';$ce='x';$cf='n';break;
    case '9':$c0='v';$c1='h';$c2='t';$c3='y';$c4='j';$c5='m';$c6='q';$c7='z';$c8='i';$c9='l';$ca='p';$cb='g';$cc='x';$cd='w';$ce='s';$cf='k';break;
    case 'a':$c0='k';$c1='v';$c2='h';$c3='s';$c4='t';$c5='w';$c6='x';$c7='y';$c8='j';$c9='g';$ca='p';$cb='m';$cc='q';$cd='l';$ce='z';$cf='i';break;
    case 'b':$c0='i';$c1='k';$c2='z';$c3='v';$c4='h';$c5='l';$c6='q';$c7='s';$c8='t';$c9='m';$ca='p';$cb='w';$cc='x';$cd='g';$ce='j';$cf='y';break;
    case 'c':$c0='y';$c1='i';$c2='k';$c3='j';$c4='z';$c5='g';$c6='v';$c7='x';$c8='h';$c9='w';$ca='p';$cb='l';$cc='q';$cd='m';$ce='t';$cf='s';break;
    case 'd':$c0='s';$c1='y';$c2='t';$c3='i';$c4='k';$c5='m';$c6='j';$c7='q';$c8='l';$c9='z';$ca='g';$cb='p';$cc='w';$cd='v';$ce='h';$cf='x';break;
    case 'e':$c0='u';$c1='z';$c2='o';$c3='k';$c4='q';$c5='j';$c6='t';$c7='i';$c8='w';$c9='g';$ca='x';$cb='p';$cc='m';$cd='n';$ce='r';$cf='l';break;
    case 'f':$c0='l';$c1='u';$c2='r';$c3='z';$c4='o';$c5='n';$c6='m';$c7='k';$c8='q';$c9='p';$ca='x';$cb='j';$cc='t';$cd='g';$ce='w';$cf='i';break;
    }
    $f=str_replace('0',$c0,$s);
    $f=str_replace('1',$c1,$f);
    $f=str_replace('2',$c2,$f);
    $f=str_replace('3',$c3,$f);
    $f=str_replace('4',$c4,$f);
    $f=str_replace('5',$c5,$f);
    $f=str_replace('6',$c6,$f);
    $f=str_replace('7',$c7,$f);
    $f=str_replace('8',$c8,$f);
    $f=str_replace('9',$c9,$f);
    $f=str_replace('a',$ca,$f);
    $f=str_replace('b',$cb,$f);
    $f=str_replace('c',$cc,$f);
    $f=str_replace('d',$cd,$f);
    $f=str_replace('e',$ce,$f);
    $f=str_replace('f',$cf,$f);
    return $f;
    }

    "От SQL иньекции проще простого защиться при помощи шифрования входных данных перед вставкой их в запрос к базе данных...И не надо ничего мудрить со специальными функциями....И соответственно в базе данные будут храниться в зашифрованном виде...Пример функции для кодирования:"

    Отрыто в комментариях к статье, рассказывающей о встроенных в php алгоритмах шифрования.
    А ведь это лишь функция для шифровки. Есть еще и для дешифровки. Даже для говнокода многовато букавок. (:

    ElForastero, 29 Декабря 2014

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

    +97

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    if (((((length > 4) && ((anUrl[0] == 'h') || (anUrl[0] == 'H'))) && 
    ((anUrl[1] == 't') || (anUrl[1] == 'T'))) && 
    (((anUrl[2] == 't') || (anUrl[2] == 'T')) &&
    ((anUrl[3] == 'p') || (anUrl[3] == 'P')))) && 
    ((anUrl[4] == ':') || (((length > 5) && 
    ((anUrl[4] == 's') || (anUrl[4] == 'S'))) && (anUrl[5] == ':'))))

    Нашел в коде проверку на http(s)

    logman, 26 Декабря 2014

    Комментарии (33)
  7. JavaScript / Говнокод #17264

    +157

    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
    function report1(req, res, next, type) {
                    if (!req.query || !req.query.name) {
                            var ct = "Income statement";
                            if (type == 'pieflow')
                                    ct = 'Pie flow chart';
                            else if (type == 'barflow')
                                    ct = 'Bar flow chart';
     
                            res.redirect(req.url + "?name=" +  ctx.i18n(req.session.apiToken, 'cash', ct));
                            return;
                    }
     
                    var pid = "reports-" + type + "-" + req.query.name;
                    var vtabs,data,reportSettings;
                    async.waterfall([
                            function (cb1) {
                                    async.series([
                                            function(cb2) {
                                                    webapp.guessTab(req, {pid: pid, name:req.query.name, url:req.url}, cb2);
                                            },
                                            function(cb2) {
                                                    webapp.getTabSettings(req.session.apiToken, pid, cb2);
                                            }
                                    ],
                                    function (err, results) {
                                            cb1(null, results[0], results[1]);
                                    });
                            },
                            function (vtabs_, reportSettings_, cb1) {                              
                                    vtabs = vtabs_;
                                    reportSettings = reportSettings_;
                                    if (_.isEmpty(reportSettings) || !reportSettings.version || (reportSettings.version != reportSettingsVersion)){
                                            reportSettings = getDefaultSettings(req.query.name);           
                                            webapp.saveTabSettings(req.session.apiToken, pid, reportSettings, function(err){
                                                    if (err) console.log(err);
                                            });
                                    }
                                    calculateGraphData(req.session.apiToken,type,reportSettings,cb1);
                            },
                            function(data_,cb1){                           
                                    data = data_;                          
                                    cb1()
                            },
                            function(){                                                                            
                                    data.tabs = vtabs;
                                    data.pmenu = {name:req.query.name,
                                            items:[{name:webapp.ctx.i18n(req.session.apiToken, 'cash','Page settings'),id:"settings",href:"#"}]}
                                    data.reportSettings = reportSettings;
                                   
                                    res.render(__dirname+"/../res/views/report", data);
                            }],
                            next
                    );
            };

    Прислали мне, значит, вступительное задание на должность разработчика node.js, а там гигантский проект, в который нужно дописать модуль, который выглядит весь так же ужасно, как эта функция. Долго порывался написать, что это самый ужасный код, который я когда-либо видел. http://pastebin.com/4NYccg3Y вот ссылка на весь файл, кому интересно, весь проект палить не буду, но скажу, что он большой и ужасный.

    Twizty, 06 Декабря 2014

    Комментарии (33)
  8. Objective C / Говнокод #17224

    −407

    1. 1
    http://habrahabr.ru/post/244487/

    Очень жаль всех этих людей, которые вынуждены писать на этом выхлопе от Apple.
    "Мыши плакали, кололись, но продолжали грызть кактус."

    cyperh, 30 Ноября 2014

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

    +160

    1. 1
    echo 'some string'."\n";

    )))

    GoodTalkBot, 20 Ноября 2014

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

    +53

    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
    template <typename T, typename Mid, int N>
    	struct UselessWrapperFillMid
    	{
    		inline static void FillMid (T* t, Mid mid)
    		{
    			mid(t[0], t[N], t[N/2]);
    			UselessWrapperFillMid<T,Mid,N/2>::FillMid (&t[0]  , mid);
    			UselessWrapperFillMid<T,Mid,N/2>::FillMid (&t[N/2], mid);
    		}
    	};
    	
    	template <typename T, typename Mid> 
    	struct UselessWrapperFillMid <T, Mid, 1>
    	{
    		inline static void FillMid (T* t, Mid mid)
    		{
    			(void)t;
    			(void)mid;
    		}
    	};

    Бесит такой понос вместо нормальной рекурсии.
    Но иначе оно не развернётся в последовательность инструкций без ветвлений и вызовов.

    TarasB, 16 Октября 2014

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

    +136

    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
    DIR_STRUCT * fill_dir_struct(DIR_STRUCT * dir_stc, _ptr_by_val_(char *) base_dir_path, _ptr_by_val_(char *) offset_dir)
    {
    	DIR_STRUCT * 		sub_dir;
    	DIR * 				srcdir;
    	struct 				stat st;
    	char 				full_sub_dir_path[MAX_PATH_SIZE];
    	struct dirent * 	dent;
    
    	sprintf(full_sub_dir_path, "%s/%s", base_dir_path, offset_dir);
    	dbgprintln("Directory %s", full_sub_dir_path);
    
    	if(NULL != (dir_stc = malloc(sizeof(DIR_STRUCT))))
    	{
    		memset(dir_stc, 0x00, sizeof(DIR_STRUCT));
    		if (NULL != (srcdir = opendir(full_sub_dir_path)))
    		{
    			if(NULL != (dir_stc->dir_path = malloc(strlen(offset_dir) + 1)))
    			{
    				strcpy(dir_stc->dir_path, offset_dir);
    				for( ;(NULL != (dent = readdir(srcdir))); )
    				{
    					if((0 != strcmp(dent->d_name, ".")) &&
    					   (0 != strcmp(dent->d_name, "..")) &&
    					   (0 <= fstatat(dirfd(srcdir), dent->d_name, &st, 0)))
    					{
    						if (S_ISDIR(st.st_mode)) //Directory
    						{
    							if(NULL != (sub_dir = fill_dir_struct(sub_dir, full_sub_dir_path, dent->d_name)))
    							{
    								dir_stc->sub_dirs 		 	  = list_append_node(dir_stc->sub_dirs, sub_dir);
    								dir_stc->dir_files_size 	 += sub_dir->dir_files_size;
    								dir_stc->sub_dir_files_count += sub_dir->sub_dir_files_count;
    							}
    							else
    							{
    								dir_stc = destroy_dir_struct(dir_stc);
    								break;
    							}
    						}
    						else 					//File
    						{
    							dbgprintln("File %s, size %lu bytes", dent->d_name, st.st_size);
    							dir_stc->dir_files 		 	 = list_append_node(dir_stc->dir_files, allocate_and_copy_char_buffer(dent->d_name, strlen(dent->d_name) + 1));
    							dir_stc->dir_files_size 	+= st.st_size;
    							dir_stc->sub_dir_files_count++;
    						}
    					}
    				}//End of for(;NULL != (dent = readdir(srcdir)); )
    				closedir(srcdir);
    			}
    			else//End of if(NULL != (dir_stc->dir_path = malloc(strlen(offset_dir) + 1)))
    			{
    				dir_stc = destroy_dir_struct(dir_stc);
    			}
    		}//End of if (NULL != (srcdir = opendir(full_sub_dir_path)))
    		else
    		{
    			dir_stc = destroy_dir_struct(dir_stc);
    		}
    	}//End of if(NULL != (dir_stc = malloc(sizeof(DIR_STRUCT))))
    
    	return dir_stc;
    }

    Восьмикратный индент, Йода нотейшн, const *(x) const в аргументах. Есть подозрение, что велосипедисты не знали о scandir.

    Это кладезь говна.

    codemonkey, 08 Октября 2014

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