home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / numega / sc501.exe / data1.cab / Examples / APIERR.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-11-25  |  10.2 KB  |  454 lines

  1. /*
  2.  * APIErr.cpp
  3.  * $Header: /BoundsChecker/Examples/BUGBNCHX/MAINERR/APIERR.CPP 7     2/03/97 7:13p Stevea $
  4.  *
  5.  * Description:
  6.  *  The functions that cause the API Check errors.
  7.  *
  8.  * Notes:
  9.  *  <implementation notes go here>
  10.  *
  11.  ***********************************************************************
  12.  *
  13.  * Nu-Mega Technologies, Inc.
  14.  * P.O. Box 7780
  15.  * Nashua, NH 03060
  16.  *
  17.  * (c) Copyright 1994, 1995 Nu-Mega Technologies, Inc.
  18.  * ALL RIGHTS RESERVED.
  19.  *
  20.  ***********************************************************************
  21.  *
  22.  **********************************************************************/
  23. #include "stdafx.h"
  24. #include "APIErr.h"
  25.  
  26. // API Check - API failure: Windows function failed
  27. void API_Failure_LoadBitmap ( )
  28. {
  29.    _TRY
  30.    {
  31.       HBITMAP hBitmap = LoadBitmap (  GetModuleHandle ( NULL ) ,
  32.                                       _T ( "HappyBitmap" )      ) ;
  33.    }
  34.    _CATCH
  35.    {
  36.    }
  37. }
  38. void API_Failure_Malloc ( )
  39. {
  40.    _TRY
  41.    {
  42.       char * pchBuff ;
  43.       pchBuff = (char*)malloc ( 0x7FFFFFFF ) ;
  44.    }
  45.    _CATCH
  46.    {
  47.    }
  48. }
  49. // API Check - API failure: Windows function not implemented
  50. void API_Failure_PaintDesktop ( )
  51. {
  52.    _TRY
  53.    {
  54.       HDC hDC;
  55.  
  56.       hDC = GetDC ( GetDesktopWindow ( ) ) ;
  57.       PaintDesktop( hDC );
  58.       ReleaseDC ( GetDesktopWindow ( ) , hDC ) ;
  59.    }
  60.    _CATCH
  61.    {
  62.    }
  63. }
  64.  
  65. void API_Failure_HeapValidate ( )
  66. {
  67.    _TRY
  68.    {
  69.       wchar_t * wszText = L"Wide Chars" ;
  70.       ATOM hAtom = AddAtomW ( wszText ) ;
  71.       if ( 0 != hAtom )
  72.       {
  73.          DeleteAtom ( hAtom ) ;
  74.       }
  75.    }
  76.    _CATCH
  77.    {
  78.    }
  79. }
  80. // API Check - Freed handle is still locked"
  81. void API_FreedHandleStillLocked ( )
  82. {
  83.    _TRY
  84.    {
  85.       HANDLE hMem    ;
  86.       LPVOID lpMem   ;
  87.  
  88.       hMem  = GlobalAlloc ( GHND , 0x100 ) ;
  89.       lpMem = GlobalLock ( hMem ) ;
  90.  
  91.       GlobalFree ( hMem ) ;
  92.  
  93.    }
  94.    _CATCH
  95.    {
  96.    }
  97. }
  98. // API Check - Handle is already unlocked
  99. void API_HandleAlreadyUnlocked ( )
  100. {
  101.    _TRY
  102.    {
  103.       HANDLE hMem;
  104.       hMem = GlobalAlloc ( GHND , 0x100 ) ;
  105.       GlobalUnlock ( hMem ) ;
  106.       GlobalFree ( hMem ) ;
  107.    }
  108.    _CATCH
  109.    {
  110.    }
  111. }
  112. // API Check - Invalid argument: At least one format specifier is
  113. //             illegal
  114. void API_IllegalFormatSpec ( )
  115. {
  116.    _TRY
  117.    {
  118.       TCHAR szBuffer[ 100 ] ;
  119.       wsprintf ( szBuffer , _T ( "Pi = %f" ) , 3.141592 ) ;
  120.    }
  121.    _CATCH
  122.    {
  123.    }
  124. }
  125. // API Check - Invalid argument: Bad destination pointer
  126. void API_BadDestPtr ( )
  127. {
  128.    _TRY
  129.    {
  130.       TCHAR buffer[ 20 ] ;
  131.       // This will also be a instrument compile error as well but it
  132.       //  only will make a single popup error.
  133.       strncpy ( NULL , buffer , 10 ) ;
  134.    }
  135.    _CATCH
  136.    {
  137.    }
  138. }
  139. // API Check - Invalid argument: Bad handle
  140. void API_BadHandleFree ( )
  141. {
  142.    _TRY
  143.    {
  144.       char * pchChar = (char*)0x10 ;
  145.       free ( pchChar ) ;
  146.    }
  147.    _CATCH
  148.    {
  149.    }
  150. }
  151. void API_BadHandleLocalFree ( )
  152. {
  153.    _TRY
  154.    {
  155.       HANDLE ptr = (HANDLE)0x10 ;
  156.       LocalFree ( ptr ) ;
  157.    }
  158.    _CATCH
  159.    {
  160.    }
  161. }
  162. void API_BadHandleRealloc ( )
  163. {
  164.    _TRY
  165.    {
  166.       char * pchChar = (char*)0x10 ;
  167.       pchChar = (char*)realloc ( pchChar , 10 ) ;
  168.    }
  169.    _CATCH
  170.    {
  171.    }
  172. }
  173. // API Check - Invalid argument: Bad source pointer
  174. void API_BadSourcePtr ( )
  175. {
  176.    _TRY
  177.    {
  178.       char szBuff[ 20 ] ;
  179.       // This will also be a instrument compile error as well but it
  180.       //  only will make a single popup error.
  181.       strncpy ( szBuff , NULL , 10 ) ;
  182.    }
  183.    _CATCH
  184.    {
  185.    }
  186. }
  187.  
  188. // API Check - Invalid argument: Conflicting combination of flags
  189. void API_ConflictFlags_GetStringTypeEx ( )
  190. {
  191.    _TRY
  192.    {
  193.       TCHAR szSrc[] = _T ( "Test String" ) ;
  194.       TCHAR szDest[ 12 ] ;
  195.  
  196.       GetStringTypeEx ( GetUserDefaultLCID ( ) ,
  197.                         CT_CTYPE1 | CT_CTYPE2  ,
  198.                         szSrc                  ,
  199.                         -1                     ,
  200.                         (LPWORD)szDest          ) ;
  201.    }
  202.    _CATCH
  203.    {
  204.    }
  205. }
  206. void API_ConflictFlags_VirtualFree ( )
  207. {
  208.    _TRY
  209.    {
  210.       LPVOID lpMem = VirtualAlloc ( NULL           ,
  211.                                     0x100          ,
  212.                                     MEM_COMMIT     ,
  213.                                     PAGE_READWRITE  ) ;
  214.       if ( NULL != lpMem )
  215.       {
  216.          VirtualFree ( lpMem ,
  217.                        0     ,
  218.                        MEM_DECOMMIT | MEM_RELEASE ) ;
  219.          // With the invalid flags VirtualFree returns FALSE, so
  220.          //  do the free so we don't leave resource leaks.
  221.          VirtualFree ( lpMem ,
  222.                        0     ,
  223.                        MEM_RELEASE ) ;
  224.       }
  225.    }
  226.    _CATCH
  227.    {
  228.    }
  229. }
  230. // API Check - Invalid argument: Format string is not followed by
  231. //             valid argument
  232. void API_FmtStrNotFollowed ( )
  233. {
  234.    _TRY
  235.    {
  236.  
  237.       char szDest[ 30 ] ;
  238.       wvsprintf ( szDest , "%s" , NULL ) ;
  239.    }
  240.    _CATCH
  241.    {
  242.    }
  243. }
  244. // API Check - Invalid argument: General"
  245. void API_General_HMENU ( )
  246. {
  247.    _TRY
  248.    {
  249.       DeleteMenu ( (HMENU)0xff00 ,
  250.                    0             ,
  251.                    MF_BYPOSITION  ) ;
  252.    }
  253.    _CATCH
  254.    {
  255.    }
  256. }
  257.  
  258. void API_General_file ( )
  259. {
  260.    _TRY
  261.    {
  262.       fclose ( (FILE*)0x01 ) ;
  263.    }
  264.    _CATCH
  265.    {
  266.    }
  267. }
  268.  
  269. void API_General_HDC ( )
  270. {
  271.    _TRY
  272.    {
  273.       COLORREF color = GetTextColor ( (HDC)0xabcd ) ;
  274.    }
  275.    _CATCH
  276.    {
  277.    }
  278. }
  279. // API Check - Invalid argument: Invalid pointer to format string
  280. void API_InvPtrToFmtString ( )
  281. {
  282.    _TRY
  283.    {
  284.       char szBuff [ 30 ] ;
  285.       // This will also be a instrument compile error as well but it
  286.       //  only will make a single popup error.
  287.       wsprintf ( szBuff , NULL , "Happy string!" ) ;
  288.    }
  289.    _CATCH
  290.    {
  291.    }
  292. }
  293. // API Check - Invalid argument: Not enough arguments for this
  294. //             format string
  295. void API_NotEnufArgsForFmtStr ( )
  296. {
  297.    _TRY
  298.    {
  299.       TCHAR szBuff [ 30 ] ;
  300.       // This will also be an instrument compile error as well.
  301.       wsprintf ( szBuff , _T ( "%d : %s" ) ) ;
  302.    }
  303.    _CATCH
  304.    {
  305.    }
  306. }
  307. // API Check - Invalid argument: Out of range
  308. void API_ArgOutOfRange_GetKeyState ( )
  309. {
  310.    _TRY
  311.    {
  312.       GetKeyState( 0XFFFF );
  313.    }
  314.    _CATCH
  315.    {
  316.    }
  317. }
  318. void API_ArgOutOfRange_CreateFont ( )
  319. {
  320.    _TRY
  321.    {
  322.       HFONT hFont = CreateFont ( 0                          ,
  323.                                  0                          ,
  324.                                  0                          ,
  325.                                  0                          ,
  326.                                  // Here is the value out of range.
  327.                                  1000                       ,
  328.                                  FALSE                      ,
  329.                                  FALSE                      ,
  330.                                  FALSE                      ,
  331.                                  ANSI_CHARSET               ,
  332.                                  OUT_CHARACTER_PRECIS       ,
  333.                                  CLIP_DEFAULT_PRECIS        ,
  334.                                  PROOF_QUALITY              ,
  335.                                  VARIABLE_PITCH | FF_SWISS  ,
  336.                                  _T ( "Arial" )              ) ;
  337.       if ( NULL != hFont )
  338.          DeleteObject ( (HGDIOBJ) hFont ) ;
  339.    }
  340.    _CATCH
  341.    {
  342.    }
  343. }
  344. void API_ArgOutOfRange_CreateFile ( )
  345. {
  346.    _TRY
  347.    {
  348.       HANDLE hFile = CreateFile ( _T ( "tmp.tmp" )             ,
  349.                                   GENERIC_READ | GENERIC_WRITE ,
  350.                                   0                            ,
  351.                                   NULL                         ,
  352.                                   // Here is the error!
  353.                                   TRUNCATE_EXISTING + 1        ,
  354.                                   FILE_ATTRIBUTE_NORMAL        ,
  355.                                   NULL                          ) ;
  356.  
  357.       if ( INVALID_HANDLE_VALUE != hFile )
  358.       {
  359.          CloseHandle ( hFile ) ;
  360.          DeleteFile ( _T ( "tmp.tmp" ) ) ;
  361.       }
  362.    }
  363.    _CATCH
  364.    {
  365.    }
  366. }
  367. // API Check - Invalid argument: Structure size field is not initialized
  368. void API_StructSizeZero ( )
  369. {
  370.    _TRY
  371.    {
  372.       OSVERSIONINFO stOSVI ;
  373.       memset ( &stOSVI , NULL , sizeof ( OSVERSIONINFO ) ) ;
  374.       GetVersionEx ( &stOSVI ) ;
  375.    }
  376.    _CATCH
  377.    {
  378.    }
  379. }
  380. // API Check - Invalid argument: Too many arguments for this
  381. //             format string
  382. void API_TooManyArgsForFmtStr ( )
  383. {
  384.    _TRY
  385.    {
  386.       TCHAR szBuff [ 30 ] ;
  387.       UINT uiOne = 1 ;
  388.       UINT uiTwo = 2 ;
  389.       // This will also be an instrument compile error as well.
  390.       wsprintf ( szBuff                   ,
  391.                  _T ( "%s" )              ,
  392.                  _T ( "Happy string!" )   ,
  393.                  uiOne                    ,
  394.                  uiTwo                     ) ;
  395.    }
  396.    _CATCH
  397.    {
  398.    }
  399. }
  400. // API Check - Invalid Argument : Undefined or illegal flags
  401. void API_IllegalFlags_AppendMenu ( )
  402. {
  403.    _TRY
  404.    {
  405.       HMENU hMenu = CreateMenu ( ) ;
  406.       AppendMenu ( hMenu                     ,
  407.                    0x80000000L | MF_STRING   ,
  408.                    0x100                     ,
  409.                    _T ( "&New Item" )         ) ;
  410.       DestroyMenu ( hMenu ) ;
  411.    }
  412.    _CATCH
  413.    {
  414.    }
  415. }
  416. void API_IllegalFlags_FoldString ( )
  417. {
  418.    _TRY
  419.    {
  420.       TCHAR szSource[] = _T ( "The source string 0-9" ) ;
  421.       TCHAR szDest[ 50 ] ;
  422.  
  423.       FoldString ( 0x00000100 | MAP_FOLDDIGITS ,
  424.                    szSource                    ,
  425.                    -1                          ,
  426.                    szDest                      ,
  427.                    sizeof ( szDest )            ) ;
  428.    }
  429.    _CATCH
  430.    {
  431.    }
  432. }
  433. // API Check - Questionable use of thead
  434. void ThreadFunc ( void * )
  435. {
  436.    void * pVoid = malloc ( 256 ) ;
  437.    free ( pVoid ) ;
  438. }
  439. void API_QuestionableUseOfThread ( )
  440. {
  441.    DWORD dwID ;
  442.    HANDLE hBadOne = CreateThread ( NULL   ,
  443.                                    0      ,
  444.                                    (LPTHREAD_START_ROUTINE)ThreadFunc ,
  445.                                    0      ,
  446.                                    0      ,
  447.                                    &dwID   ) ;
  448.    WaitForSingleObject ( hBadOne , 10000 ) ;
  449.    CloseHandle ( hBadOne ) ;
  450. }
  451.  
  452.  
  453.  
  454.