1. Java / Говнокод #4402

    +62

    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
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    public int doEndTag() throws JspException {
            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
            try {
             	String fieldValue = fdata;
        		String boolVal="false";
        		StringBuffer field_Value = new StringBuffer();
        		String indexString="";
        		int spaceIndex;
        	     
            	int slen = fieldValue.length();
        		int starti=0;
        		int endi= fsize;
        		if (fdata==null) {
        			 boolVal="true";
        			 field_Value.append("");
        		}
        		
        		if (fsize > slen ||  truncateDataSize > fdata.length() ) {
        		   boolVal="true";
        		   field_Value.append(fdata);
        		}
        		
        		if (truncateDataSize!=0  && fdata.length() > truncateDataSize ) {
        		  fieldValue=""; 	
        		  fieldValue = fdata.substring(starti,truncateDataSize);
        		  slen = fieldValue.length(); 
        		}
        		
        		while(boolVal=="false") {
        			indexString=  fieldValue.substring(starti,endi); 
        			spaceIndex = indexString.lastIndexOf(" ");
        			if (spaceIndex == -1) {
        				int initialLength = field_Value.length(); 
        				field_Value.append(fieldValue.substring(starti,endi));
        				// field_Value.append("<br>");
        				// MT-2238 start
        				int firstIndex = indexString.indexOf("<");
        				int lastIndex  = indexString.indexOf(">");
        				if(lastIndex<firstIndex) {
        					lastIndex  = indexString.indexOf(">",(lastIndex+1));
        				}
        				if(firstIndex >= 0 && lastIndex <= indexString.length() && lastIndex>firstIndex) {
        					if(!(indexString.substring(firstIndex+1,lastIndex).equalsIgnoreCase("br"))) {
        						if(lastIndex<=initialLength && indexString.endsWith(">")) {
        							field_Value.append("<br>");
        						}else {
        							field_Value.insert((initialLength+(lastIndex+1)),"<br>");
        						}
        					}
        				}
        				//in case no HTML tags
        				if(!checkInTag(false, field_Value.toString()) 
        						&& firstIndex==-1 && lastIndex==-1
        				) {
        					// add BR tag
        					field_Value.append("<br>");
        				}
        				// MT-2238 end
        			} else {
        				field_Value.append(fieldValue.substring(starti,starti + spaceIndex));
        				endi = starti + spaceIndex + 1;  
            			if(forceWrap == 1){
                			field_Value.append("<br>");
            			} else{
            				field_Value.append(" ");
            			}
        			}
        			starti = endi;
        			if((endi + fsize) > slen) {
        			   endi = slen - endi;
        			   field_Value.append(fieldValue.substring(starti,starti + endi));
        			   boolVal="true";
        			} else {
        				endi = endi + fsize;
        			}
        		}
        		
        		if (truncateDataSize!=0  && fdata.length() > truncateDataSize && singleLine==false) {
        		   field_Value.append("...");
        		}
        		
        		if (singleLine== true ) {
    	    		 if (fsize<fdata.length())	
    	    		 {	
    	    		  field_Value.delete(0,field_Value.length());		
    	    		  field_Value.append(fieldValue.substring(0,fsize));
    	    		  field_Value.append("...");
    	    		 } 
        		}
        		pageContext.getOut().write(field_Value.toString());
            } catch (Exception e) {
            	log.error(" Exception in image tag ",e);
            }
            return EVAL_PAGE;
        }

    Найдено в кастомном теге нашева прилаженийа. Писано паходу интусами %) ы

    Вся соль в строке (#29):
    while(boolVal=="false")

    И что самое интересное.. Оно работает!! :DDD ы

    А работает как я выяснил изза 'smart' части java %)) так как boolVal инитиализируется в этом же методе, то boolVal = "false" и "false" это 1 и тот же объект %) паэтаму и проходит сравнение. Т.е. java подменяет "false" во всех местах на адин и тот же объект %) но если бы "false" пришёл снаружи, то всё.. это другой объект %)

    ппц, я когда увидел долго бился головой ап стенку %)) в папытках понять, почему оно работает %))
    ксати я точно не уверен, но помойму если в настройках компилятора покапаться, то думаю можно сделать так чтобы каждой объявление "false" было новым объектом (или нельзя? О_о хотя ясно, что это бесмыслено), тогда работать не будит %) ы

    Запостил: Pepper-X, 20 Октября 2010

    Комментарии (17) RSS

    • Диагноз: это пипец...
      Ответить
    • ниасилил
      Ответить
    • это ж надо так позорить яву. аффтару место на пыхе )))
      Ответить
      • и, да, странно, что пых считают кодомартышковским языком. Согласно последним "рейтингам", на первом месте жаба. Оказывается, на ней как плесень развивается стадо быдлокодеров, похлеще, чем на пыхе.
        Ответить
    • Зачем было простыню выкладывать, если дело только в одной строчке?
      Ответить
    • и да, автору читать розенталя
      Ответить
    • простыню не читал, но по поводу вопроса "почему работает?" - а потому что http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Boolean.html#Boolean(java.lang.String)
      Allocates a Boolean object representing the value true if the string argument is not null and is equal, ignoring case, to the string "true". Otherwise, allocate a Boolean object representing the value false.

      + автобоксинг
      boolVal = "true"; => boolVal = new Boolean("true"); => boolVal = true;

      Но, естественно, менее говнистым сей код от этого не становится.
      Ответить
      • Так ведь boolVal же не Boolean, а String. А работает оно потому, что здесь значение "false" фигурирует в присвоении и в сравнении в виде строкового литерала. А строковые литералы автоматически интернируются компилятором, соответственно в рантайме у них будут одинаковые адреса. Как раз == проверяет равенство адресов в памяти.
        Ответить
        • причом только, када литералы внутри однафо класа %)
          если в разных то ужо будут расныйэ.. ы
          Ответить
      • Согласен, тип Boolean ни явно, ни скрыто нигде здесь не фигурирует, и в строке boolVal с тем же успехом можно было бы писать "yes" и "no" =)

        Запостившему - срочно усиленно учить русский язык, отложив пока программирование.
        Ответить
        • и прекратить хихикать :р
          Ответить
          • %)
            руски фасмошна йа снайу лучшэ вашефа ;) ыы

            а как писат ента личнайэ дела каштафа %) ы

            йа лична так релаксируйу %))
            з.ы. к таму жэ переключатсо с "рускафа" на "не руски" оч дажа палесна для моцка %)) пачти как с инасранава на радной и абратна %) ы
            Ответить
            • что это за хуйня такая? этож каким тормозом надо быть, что переться от 6 лет назад разъеденного раком и сгнившего падонак-спика...
              Ответить

    Добавить комментарий