1. C++ / Говнокод #22011

    −25

    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
    OpFile file;
    		BOOL found;
    		
    		if (OpStatus::IsMemoryError(file.Construct(realPath.CStr(), OPFILE_ABSOLUTE_FOLDER)) || OpStatus::IsMemoryError(file.Exists(found)))
    		{
    			return NULL;
    		}
    		else if (found == TRUE)
    		{		
    			OpFileInfo::Mode mode;
    			if (OpStatus::IsMemoryError(file.GetMode(mode)))
    			{
    				return NULL;
    			}
    			else
    			{
    				is_file = (mode == OpFileInfo::FILE ? TRUE : FALSE);
    			}
    		}

    Оттуда.

    Potentially uninitialized local variable 'found' used.

    Запостил: inkanus-gray, 20 Января 2017

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

    • SEO-пост.
      Ответить
    • Почему анинишалайзед? Вроде инишалайзед.
      Ответить
    • Плохой код: приходится без причины напрягать мозг, чтобы проверить, что он корректный. Лучше переписать, чтобы и человеку, и IDE было понятно, что всё пучком.
      Ответить
      • > проверить, что он корректный
        А он ещё и некорректный, как оказалось. Впрочем, как почти любой код, над чтением которого приходится напрягать мозг.
        Ответить
    • > OpStatus::IsMemoryError(file.Exists(found))
      Т.е. на все остальные ошибки, помимо нехватки памяти, можно забить?

      Интересно, а что при этом окажется в found... Неинициализированный мусор останется, наверное. Так что конпелятор не зря на эту хуиту ругался :3

      З.Ы. Кинь ссылку на исходники.
      Ответить
      • Кинул тебе ссылку, проверь:
        https://notabug.org/141243/presto/src/master/modules/webserver/src/resources/webserver-file.cpp#L55

        https://bitbucket.org/prestocore-fan/presto/src/c357e547fcbdfbf7bd448f6409ecb042a807bb06/modules/webserver/src/resources/webserver-file.cpp?at=master#webserver-file.cpp-55
        Ответить
        • Return OK, ERR_NO_MEMORY, ERR_NO_ACCESS or ERR. Что и требовалось доказать.
          Ответить
          • Ворнинг про потенциально неинициализированную переменную всплывает в пяти местах:
            platforms\windows\pop3-parse.cpp(1708)
            modules\dom\src\opera\domgadgetfile.cpp( 760)
            modules\webserver\src\resources\webserve r-file.cpp(55)
            adjunct\quick_toolkit\windows\desktopwin dow.cpp(2825)
            platforms\windows\imap-parse.cpp(3942)

            Не эта ли гадость приводила к случайным падениям Оперы, которые трудно воспроизвести?
            Ответить
          • Ну и да: @param[out] exists Set to TRUE if the file exists. The value must be ignored unless OpStatus::OK is returned.

            Т.е. если отобрать у оперы доступ к какой-нибудь папке, эта функция начнёт возвращать рандом для файлов в ней. Проверь.
            Ответить

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