1. ActionScript / Говнокод #7305

    −115

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    [code]		public function send(data:String):void {
    			trace("OUT: " + data);
    			dispatchEvent(new StreamEvent(StreamEvent.COMM_OUT, false, false, null, data));
    			try {
    				socket.writeUTFBytes(data);
    				socket.flush();
    			} catch (error:Error) {
    				trace("Error writing to socket: " + error);
    				dispatchEvent(new StreamEvent(StreamEvent.DISCONNECTED, false, false, null));
    			}
    		}[/code]

    Какая-то опенсорсная реализация XMPP. Для тех, кто не в курсе socket.writeUTFBytes(null) выкинет ошибку.

    Запостил: wvxvw, 21 Июля 2011

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

    • И шо?
      Ответить
      • Ну вот подписались вы на событие отсоединения, и вот вам его сообщили. Вы пребываете в полной уверенности что соединение прекратилось, а оно вполне себе работает, сообщает о вашем онлайн присутствии, например. Ну кому как, кому-то может и не критично, но будут люди кому такой ход не понравится :)
        Ответить
        • А как может null попасть в эту функцию? Если он никогда не попадает, то и проблемы нет.
          Ответить
          • Это ввод пользователя, там в принципе что угодно может быть, и оно до этого не проверяется (т.е. по задумке автора это публичные API, эта функция не вызывается из авторского кода, а должна вызываться пользователем).
            Кроме null могут быть и другие ситуации, когда, например System.useCodepage используется, и в строке будут не Юникоды. Редкостная ситуация, но все же.
            Ответить
            • Если ввод пользователя, то я с трудом представляю, как можно ввести в поле ввода не пустую строку, а null. К тому же, согласно протоколу, на сервер нужно отправлять не сырой ввод, а как-то декорированный (в XML?), т.е. уже null не получится.

              Ошибкой, вероятно, является предоставление этой низкоуровневой функции в публичный API. Но если «публичность» ограничивается одной программой того же авторства, то в этом ничего страшного, автор сам позаботится, чтобы передавать валидные данные.
              Ответить
              • А почему сразу текстовое поле? А может пользователь посылает sms - откуда вы знаете?

                Так автор (т.е. пользователь API) никогда не узнет, что данные не валидны! В этом то и недостаток - т.как если в ответ на невалидные данные выбрасывается исключение - тогда, да, пользователь сообразит, что что-то не так. А если в ответ на невалидные данные происходит какое-то вообще не связаное с ними действие - так откуда ж узнать, что данные были невалидными?
                Ответить
              • PS. Мой юз-кейс, например: получаю сообщения от сервера, и пересылаю дальше, никаких текствовых полей у меня нет.
                Ответить
                • Как можно прислать sms с null, расскажите.

                  Я не работал с XMPP, но мне кажется сомнительным, что на сервер отсылается просто сырой пользовательский ввод. Как минимум должны быть управляющие команды, а то и в XML всё (на что намекает буковка «хер»).
                  Ответить
                  • Не тот сервер... сервер который захватывает и передает дальше ввод с клавиатуры, сорри. В данном случае речь идет про автоматическое тестирование в Гудзоне или похожей системе. Там как бы нет / не будет никаких текстовых полей. SMS - тоже имелось в виду получение ввода от какого-нибудь сервиса, а не набивание текста пользователем. Конечно, это все можно реализовать так, что null не должен будет туда попадать, но для того, чтобы это сделать, нужно ж знать, что это нужно, а для этого нужно найти реализацию этой функции, и увидеть, что она делает совсем не то, что ожидалось. (Нормальный человек посылал бы событие disconnect, когда сокет отключился, а не после ошибки записи в него, которая может быть вызвана другими причинами.
                    Ответить
    • показать все, что скрытоvanished
      Ответить

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