Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Redundant Condition  at lpvm.c:2826

Categories: LANG.STRUCT.RC CWE:570 CWE:571
Warning ID: 2746.2801
Procedure: mksocs
Trace: View
Modified: Wed Sep 2 12:44:51 2009   show details
 
Priority: None
State: None
Finding: None
Owner: None
  edit properties

Legend [ X ]
Warning Location
Contributes
Parse Error
Other Warning
Two or More Loop Iterations
On Execution Path
Comment
Macro
Preprocessor
Include
Keyword
Preprocessed Away

Source  |  Language: C Hide Legend     
ProblemLineSource
   /u1/paul/SATE/2010/c/pvm/pvm3/src/lpvm.c
   Enter mksocs
 2792 mksocs() 
 2793 {
 2794         char buf[128];
 2795 #ifndef WIN32 
 2796         int d;
 2797 #else 
 2798         HANDLE d; 
 2799 #endif 
 2800  
 2801 #ifdef SOCKLENISUINT 
 2802 #if defined(IMA_AIX4SP2) || defined(IMA_AIX5SP2)
   ...
 2807 #else 
 2808         int oslen;
 2809 #endif 
 2810         int n;
 2811         int try;
 2812         char *p;
 2813 #ifndef NOUNIXDOM 
 2814         struct sockaddr_un uns;
 2815 #endif 
 2816  
 2817         if (topvmd)
 2818                 return 0;
 2819  
 2820         /*
 2821         * get addr of pvmd, make socket to talk.
 2822         * first try envar PVMSOCK, then try sockaddr file.
 2823         */ 
 2824  
 2825         if (!(p = getenv("PVMSOCK"))) {
Always True: p != 02826                 if (!(p = pvmdsockfile())) {     /* Redundant Condition */
 2827                         pvmlogerror("mksocs() pvmdsockfile() failed\n");   /* Unreachable Call (ID: 2747.2802) */
 2828                         goto bail;
 2829                 }
 2830 #ifndef WIN32 
 2831                 if ((d = open(p, O_RDONLY, 0)) == -1) {
 2832 #else  
 2833                 d = win32_open_file(p);
 2834                 if (d == (HANDLE) -2) {
 2835                         system_loser_win=TRUE;
 2836                         d = (HANDLE) _open(p,O_RDONLY,0);
 2837                 }
 2838                 if (d== (HANDLE) -1) { 
 2839 #endif 
 2840                         pvmlogperror(p);
 2841                         goto bail;
 2842                 }
 2843 #ifdef WIN32 
 2844                 if (!system_loser_win) {
 2845                         n = win32_read_file(d,buf,sizeof(buf));
 2846                         win32_close_file(d);
 2847                 }
 2848                 else  {
 2849                         n = (int)_read((int)d, (void *)buf, (unsigned int)sizeof(buf));
 2850                         (void)_close((int)d);
 2851                 } 
 2852 #else 
 2853                 n = read(d, buf, sizeof(buf));
 2854                 (void)close(d);
 2855 #endif 
 2856                 if (n == -1) {
 2857                         pvmlogperror("mksocs() read addr file");
 2858                         goto bail;
 2859                 }
 2860                 if (n == 0) {
 2861                         pvmlogerror("mksocs() read addr file: wrong length read\n");
 2862                         goto bail;
 2863                 }
 2864                 buf[n] = 0;   /* Buffer Overrun (ID: 2750.2805) */
 2865                 p = buf;
 2866         }
 2867  
 2868         FD_ZERO(&pvmrfds);
 2869 /*
 2870         FD_ZERO(&pvmwfds);
 2871 */ 
 2872         pvmnfds = 0;
 2873  
 2874         topvmd = ttpcb_new();
 2875         topvmd->tt_tid = TIDPVMD;   /* Null Pointer Dereference (ID: 2749.2804) */
 2876  
 2877         if (p[0] == '/') {
 2878 #ifdef NOUNIXDOM 
 2879                 pvmlogerror("mksocs() no support for Unix domain socket\n");
 2880                 goto bail; 
 2881  
 2882 #else /*NOUNIXDOM*/ 
 2883                 if ((topvmd->tt_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
 2884                         pvmlogperror("mksocs() socket");
 2885                         goto bail;
 2886                 }
 2887  
 2888         /*
 2889         * XXX these 2 loops are a hack -
 2890         * XXX it keeps too many tasks from overflowing the pvmd listen q.
 2891         * XXX maybe the pvmd should make a socket pair for the task instead.
 2892         */ 
 2893                 try = 5;
 2894                 while (1) {
 2895                         BZERO((char*)&uns, sizeof(uns));
 2896                         uns.sun_family = AF_UNIX;
 2897                         strcpy(uns.sun_path, p);   /* Buffer Overrun (ID: 2748.2803) */
 2898                         n = sizeof(uns);
 2899                         if (connect(topvmd->tt_fd, (struct sockaddr*)&uns, n) == -1) {
 2900                                 if (--try <= 0) {
 2901                                         pvmlogperror("mksocs() connect");
 2902                                         pvmlogprintf("\tsocket address tried: %s\n",p);
 2903                                         goto bail;
 2904                                 }
 2905                                 pvmsleep(1);    /* XXX hmm again */ 
 2906  
 2907                         } else 
 2908                                 break;
 2909                 }
 2910 #endif /*NOUNIXDOM*/ 
 2911  
 2912         } else {
 2913                 if ((topvmd->tt_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
 2914                         pvmlogperror("mksocs() socket");
 2915                         goto bail;
 2916                 }
 2917  
 2918                 try = 5;
 2919                 while (1) {     /* goto is at the root of all good programming style */ 
 2920                         hex_inadport(p, &topvmd->tt_osad);
 2921                         topvmd->tt_osad.sin_family = AF_INET;
 2922                         n = sizeof(topvmd->tt_osad);
 2923  
 2924                         if (connect(topvmd->tt_fd, (struct sockaddr*)&topvmd->tt_osad, n
 2925                         == -1) {
 2926                                 if (--try <= 0) {
 2927                                         pvmlogperror("mksocs() connect");
 2928                                         pvmlogprintf("\tsocket address tried: %s\n",p);
 2929                                         goto bail;
 2930                                 }
 2931                                 pvmsleep(1);    /* XXX hmm again */ 
 2932                         } else 
 2933                                 break;
 2934                 }
 2935  
 2936 #ifndef NOSOCKOPT 
 2937 #ifdef WIN32 
 2938                 d = (HANDLE)1; 
 2939 #else 
 2940                 d = 1;
 2941 #endif 
 2942                 if (setsockopt(topvmd->tt_fd, IPPROTO_TCP, TCP_NODELAY, (char*)&d, sizeof(int)) 
 2943                 == -1) {
 2944                         pvmlogperror("mksocs() setsockopt");
 2945                         goto bail;
 2946                 }
 2947 #endif 
 2948                 oslen = sizeof(topvmd->tt_sad);
 2949                 if (getsockname(topvmd->tt_fd, (struct sockaddr*)&topvmd->tt_sad, &oslen) == -1) {
 2950                         pvmlogperror("mksocs() getsockname");
 2951                         goto bail;
 2952                 }
 2953         }
 2954  
 2955         topvmd->tt_state = TTOPEN;
 2956         pvm_fd_add(topvmd->tt_fd, 1);
 2957  
 2958         return 0;
 2959  
 2960 bail
 2961         if (topvmd)
 2962                 ttpcb_delete(topvmd);
 2963         topvmd = 0;
 2964         return PvmSysErr;
 2965 




Change Warning 2746.2801 : Redundant Condition

Priority:
State:
Finding:
Owner:
Note: