1. JavaScript / Говнокод #2301

    +165.7

    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
    function sendClicked(F)
    {
    var binary = document.getElementById("binary");
    var binary_file = binary.value;
    var binary_len = binary_file.length;
    if(binary_file == ""){
    binary.focus();
    alert('File name can not be empty !');
    return false;
    }
    else {
    if(binary_len<=4) {
    binary.focus();
    alert('File is wrong !');
    return false;
    }
    if(binary_file.charAt(0) != '/') {
    if(binary_file.charAt(1) != ':') {
    binary.focus();
    alert('File is wrong !!');
    return false;
    }
    }
    if(binary_file.charAt(binary_len-4) != '.') {
    binary.focus();
    alert('File is wrong !!');
    return false;
    }
    if(binary_file.charAt(binary_len-3) != 'B') {
    if(binary_file.charAt(binary_len-3) != 'b') {
    binary.focus();
    alert('File is wrong !!');
    return false;
    }
    }
    if(binary_file.charAt(binary_len-2) != 'I') {
    if(binary_file.charAt(binary_len-2) != 'i') {
    binary.focus();
    alert('File is wrong !!');
    return false;
    }
    }
    if(binary_file.charAt(binary_len-1) != 'N') {
    if(binary_file.charAt(binary_len-1) != 'n') {
    binary.focus();
    alert('File is wrong !!');
    return false;
    }
    }
    show_div(true, "progress_div");
    progress();
    return true;
    }
    }
    
    </script>

    Со странички обновления прошивки DWL-G700AP. Из-за этого говнокода прошивается только из internet explorer.

    Запостил: user.user521, 19 Декабря 2009

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

    • по децки
      Ответить
    • Код конечно говно, но не вижу здесь привязки к IE. ткните носом, пожалуйста.
      Ответить
      • +1, где привязка к IE? Или в других браузерах телепатический модуль препятствует выполнению говнокода?

        Кстати о говнокоде: не могу отправить коммент из оперы :(
        Ответить
        • > не могу отправить коммент из оперы :(
          А я почему-то могу.
          Ответить
      • При чём тут привязка к IE? Просто одни фишки могут работать в одних браузерах и не работать в других, и это касается не только, скажем, дизайна веб-страницы (не секрет, что верстальщику часто приходится срать кирпичами, обеспечивая кроссбраузерность своей поделки), но и JavaScript'а. Я нечасто пишу на JS, но помню, что один раз пришлось долго мучиться над парой функций, которые в IE как раз работать не хотели, и отказываться от использования for...in, который на ровном месте отказался работать в Опере (в чём было дело, до сих пор не знаю - нет нужды пока к этому возвращаться). Межбраузерные подводные камни есть везде.
        Ответить
        • Вот ты сейчас путаешь абстрактное с конкретным.
          Разговор ведь не шел о том бывают ли привязки к IE через JavaScript. Вопрос возник: какие в ЭТОМ коде есть привязки к IE?
          Ответить
          • Понятно. Слоупочу, значит. Тогда по теме. Скопипастил код, долго расставлял отступы (блджад!), немного думал. Про то, что аффтара говнокода надо отправить назад в школу, и говорить нечего, это само собой разумеется. Могу предположить, что засада сидит где-то в строках 17-23, которые проверяют, что имя файла начинается с "/" или с имени диска: быть может, браузеры, отличные от IE, пишут туда что-нибудь типа "file://", и проверка накрывается. Проверять лень, честно говоря. Запостившему код советую, если он пользуется Оперой, открывать исходный код страницы, править баг руками (в данном случае комментить всё, оставляя лишь return true) и жать "Применить изменения". Огнелисофаны же, как сказано ниже, могут наслаждаться ФайрБагом.
            Ответить
            • >браузеры, отличные от IE, пишут туда что-нибудь типа "file://"
              Ничего такого они не пишут.
              Ответить
              • Что возвращает нас к вопрому: Где заявленная постером привязка к IE?
                Ответить
                • Накатал тупую проверку
                  alert( $('input:file').val() );

                  Заправил туда файлик
                  ie: F:\PIKS\FINEARTS\OP_SANTA.GIF
                  Опера: C:\fake_path\OP_SANTA.GIF
                  ФФ: OP_SANTA.GIF
                  Видна привязка?
                  Ответить
    • О, ужас... Я нечаянные завязки на ИЕ обходил при помощи файрбага
      Ответить
    • Работает под ИЕ, ФФ, Опера и Хром....

      function sendClicked(){
        var bin = document.getElementById('binary');
        var val = bin.value;
        var len = val.length;
        var msg = '';
        var pre = '';
        var ext = '';
      
        for(var i = 0;i < 2; i++)
          pre += val.charAt(i);
        for(var i = 4;i > 0; i--)
          ext += val.charAt(len - i);
      
        if(
              pre != '/:' ||
              ext.toLowerCase() != '.bin'
        )
          msg = 'File is wrong!';
      
        if(val == '')
          msg = 'File name can not be empty!';
      
        if(msg.length > 0){
          bin.focus();
      	alert(msg);
      	return false;
        }
        alert('OK');
      }


      Проверять на длину строки не надо, т.к. минимальное зачение /:.bin точно больше пяти.
      Ответить

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