1. Список говнокодов пользователя ISith

    Всего: 4

  2. C++ / Говнокод #2709

    +73.5

    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
    //...                            
                                           }
    
                                        }
                                      }
                                      if(found) break;
                                    }
                                  }
                                  aStr=wcstok(NULL,m_cmdSEP);
                                }
                              }
                            }
                          }
                        }
                      }
                      else NoDeviceErrorActive(1);
                    }
                  }
                }
                else NoDeviceErrorActive(1);
              }
            }
          }
        }
      }
    //...

    Кусочек функции, сегодня наткнулся, сама функция занимает 540 строк, все методы класса -- 8000 =). И форматирование оригинальное -- не табами, а двумя пробелами =) . Мне нужно было просто посмотреть, как этот класс одну штуку делает, и я теперь сижу счастливый и думаю, как хорошо, что не мне этот код поддерживать =)

    ISith, 03 Марта 2010

    Комментарии (17)
  3. Си / Говнокод #2502

    +136.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
    BOOLEAN
    KiCheckForAtlThunk (
        IN PEXCEPTION_RECORD ExceptionRecord,
        IN PCONTEXT Context
        )
    
    /*++
    
    Routine Description:
    
        This routine will determine whether an access violation was raised due to
        an attempt to execute an ATL thunk in a no-execute, non-stack area.
    
        If so, the thunk will be emulated and execution resumed.
    
    Arguments:
    
        ExceptionRecord - Supplies a pointer to an exception record.
    
        Context - Supplies a pointer to a context frame.
    
    Return Value:
    
        TRUE - Context was updated to reflect the emulated ATL thunk, resume
               execution.
    
        FALSE - Not an ATL thunk, continue raising the exception.
    
    --*/
    
    //.........
    //KiDispatchException:
    //......
     switch (ExceptionRecord->ExceptionCode) {
            case STATUS_BREAKPOINT:
                ContextFrame.Eip--;
                break;
    
            case KI_EXCEPTION_ACCESS_VIOLATION:
                ExceptionRecord->ExceptionCode = STATUS_ACCESS_VIOLATION;
                if (PreviousMode == UserMode) {
                    if (KiCheckForAtlThunk(ExceptionRecord,&ContextFrame) != FALSE) {
                        goto Handled1;
                    }
    
    //................

    Объявление KiCheckForAtlThunk (втыкать в комменты и название =)) ) Для тех кто в танке: исходники Windows, оконные классы ATL выделяют тупо в хипе кусок-переходник, который заменяет HWND, идущий первым параметром в оконную процедуру, на естественный, объектно-ориентированный this. Так вот, если у нас установлено где-то в реестре юзать защиту от выполнения данных, то, естественно, в хипе хер чего выполнишь, и возникнет #GP, и тут-то нам и придет на помощь KiCheckForAtlThunk =) Короче, ИМХО, вносить изменения в ядро, для того, чтобы нормально работала криво написанная юзермодная библиотека -- та еще жесть =) Все кто минусует -- не шарят :P

    ISith, 30 Января 2010

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

    +70.8

    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
    lseek( h, headerSize+0x500, SEEK_SET );
    	if( _read( h, &buf, sizeof buf ) != sizeof buf )
    		goto __read_error;
    
    	for( int i = 0; i < NUM_EL(sig); ++i ) {
    		if( *(long*)&buf[sig->offs] != *(long*)sig->str ) {
    __wrong_format:
    			message( .... );
    			_close( h );
    			return FALSE;
    		}
    	}
    	if( *(long*)&buf[0x2C] != *(long*)"_TAG" ) {
    		message( .... );
    		_close( h );
    		return FALSE;
    	}
    	if( *(long*)&buf[0x32] != *(long*)"_VER" )
    		goto __wrong_format;
    
    	*platform = *(ushort*)&buf[0x30];
    	if( ver ) {
    		long verOffs = headerSize + ((ulong)(*(ushort*)&buf[0x38]) << 4) + *(ushort*)&buf[0x36];
    		lseek( h, verOffs, SEEK_SET );
    		if( _read( h, ver, sizeof(float) ) != sizeof(float) )
    			goto __read_error;
    	}
    	_close( h );

    Нужно было посмотреть, как делается одна вещь, залез в исходники некоторого старого __С++__(!!!!!!!!!!!!!!)(так что не надо "где здесь с++"=) ) проекта, там классы и все, как положено =)
    Причем писал не школьник, а взрослый дядька, у которого опыта больше, чем у меня сознательной жизни(ну это я образно=) ) Я до сих пор пребываю в состоянии культурно-эстетического шока =)

    ISith, 21 Января 2010

    Комментарии (20)
  5. C++ / Говнокод #2419

    +66.6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    //Дефайн в некотором хэдере
    #define _TAPI(b) do {BOOL _b = (BOOL)(b); if (!b) throw(system_exception(GetLastError())); } while (false);
    //...
    // И далее такое:
    //...
    _TAPI (::CreateProcess(0, (LPWSTR)m_process.c_str(), 0, 
    				0, FALSE, CREATE_SUSPENDED, 0, 0, &si, &pi));

    Мой говнокод, хотя скорее опечатка =), я с такими явлениями уже не раз сталкивался, но все равно в течение получаса не мог понять, почему у меня по два процесса запускается =)))

    ISith, 15 Января 2010

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