jbeuhler-flexelint-bugs-found-20031128
authorJeffrey Altman <jaltman@grand.central.org>
Sat, 29 Nov 2003 22:07:57 +0000 (22:07 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sat, 29 Nov 2003 22:07:57 +0000 (22:07 +0000)
This patch covers bugs found by running flexelint on
the CVS code on Windows NT.

- incorrect enum used in al_creds.cpp and various other files
- use of local after it goes out of scope in al_wizard.cpp
- uninitialized class members in afsclass/*
- cm_config.c looks like it has code commented out accidentally
- useless statement in alert.cpp
- no default case handling in problems.cpp
- strange use of & on booleans in set_clone.cpp
- fgets() and fclose() on closed stream in cellconfig.c
- memory leak in cellconfig.c
- *scanf into variables of unknown length in cellconfig.c
- incorrect pointer passed to getAFSServer() in cellconfig.c
- possible buffer overflows in userok.c
- address of array in bos.c
- too many arguments for printf() in commands.c
- return code not saved in bucoord/main.c
- bad types for argv arrays in bucoord/main.c
- probably incorrect initializer list in ol_verify.c
- extra argument to TLog() in lwps.c
- memory leak in cmd/cmd.c
- lack of typecast on malloc() in a couple files
- lower-case L for long constant in touch.c (is it a 1 or an l...)
- parentheses nesting error in util_cr.c
- apparently invalid case fall-through in util_cr.c
- various memory leaks in util_cr.c
- macro missing parens in crypt.c
- macro missing parens in quad_cksum.c
- null pointer deref in kpasswd.c (CVS work in progress?)
- Print_bos_ProcessState_p() code does not look correct
- extra argument to printf() in kas.c
- typo in vsprocs.c
- macro missing parens in iomgr.c
- address of array in threadname.c
- storing result of getch() in char type in waitkey.c (may not match EOF constant)
- storing pointer to local car in global in ptserver.c (benign -- it is in main())
- address of array in rx_lwp.c
- macro missing parens in rx_packet.h
- impossible == (signed vs. unsigned?) in rxdebug.c
- bogus constants in xdr.c and xdr_array.c (possible security implications?)
- incorrect test of fd for open file in update/server.c
- dangerous unparenthesized macro in get_krbrlm.c
- buffer overrun in regex.c
- missing comma causes string concat and bad array init in vlclient.c
- comparison of string < 0 in ntops.c
- default case has no code in vos.c
--
Joe Buehler

>>>>

Comments: Several comments for FIXME left in the code - unaddressed

38 files changed:
src/WINNT/afsapplib/al_creds.cpp
src/WINNT/afsapplib/al_wizard.cpp
src/WINNT/afsclass/c_grp.cpp
src/WINNT/afsclass/c_svr.cpp
src/WINNT/afsclass/c_usr.cpp
src/WINNT/afssvrmgr/alert.cpp
src/WINNT/afssvrmgr/problems.cpp
src/WINNT/afssvrmgr/set_clone.cpp
src/auth/cellconfig.c
src/auth/userok.c
src/bucoord/main.c
src/budb/ol_verify.c
src/cmd/cmd.c
src/comerr/compile_et.c
src/config/mkvers.c
src/config/touch.c
src/config/util_cr.c
src/des/crypt.c
src/des/quad_cksum.c
src/kauth/kpasswd.c
src/libadmin/test/bos.c
src/libadmin/test/kas.c
src/libadmin/vos/vsprocs.c
src/lwp/iomgr.c
src/lwp/threadname.c
src/lwp/waitkey.c
src/ptserver/ptserver.c
src/rx/rx_lwp.c
src/rx/rx_packet.h
src/rx/rxdebug.c
src/rx/xdr.c
src/rx/xdr_array.c
src/rxgen/rpc_main.c
src/update/server.c
src/util/get_krbrlm.c
src/util/regex.c
src/vlserver/vlclient.c
src/vol/ntops.c

index 43acc55..237a606 100644 (file)
@@ -954,7 +954,7 @@ BOOL AfsAppLib_IsUserAdmin (PVOID hCreds, LPTSTR pszUser)
                kas_principalEntry_t Entry;
                if (kas_PrincipalGet (hCell, NULL, &Identity, &Entry, &status))
                   {
-                  if (Entry.adminSetting == ADMIN)
+                  if (Entry.adminSetting == KAS_ADMIN)
                      rc = TRUE;
                   }
 
index 63de354..fe8b44f 100644 (file)
@@ -168,6 +168,7 @@ void WIZARD::SetDialogTemplate (int iddTemplate, int idcLeftPane, int idcRightPa
 void WIZARD::SetGraphic (int idbGraphic16, int idbGraphic256)
 {
    LPRGBQUAD pargb = NULL;
+   RGBQUAD argb[256];
 
    m_idbGraphic16 = idbGraphic16;
    m_idbGraphic256 = idbGraphic256;
@@ -202,7 +203,6 @@ void WIZARD::SetGraphic (int idbGraphic16, int idbGraphic256)
          HDC hdc = CreateCompatibleDC (NULL);
          HBITMAP bmpOld = (HBITMAP)SelectObject (hdc, m_bmpGraphic256);
 
-         RGBQUAD argb[256];
          GetDIBColorTable (hdc, 0, 256, argb);
          pargb = argb;
 
index cddcd95..44a04b1 100644 (file)
@@ -41,6 +41,7 @@ PTSGROUP::PTSGROUP (LPCELL lpCellParent, LPTSTR pszGroup)
    m_mszMembers = NULL;
    m_mszMemberOf = NULL;
    m_mszOwnerOf = NULL;
+   memset(&m_gs, 0, sizeof(m_gs));
 }
 
 
index b1269cc..01ef4b6 100644 (file)
@@ -89,6 +89,7 @@ SERVER::SERVER (LPCELL lpCellParent, LPTSTR pszName)
    m_fDelete = FALSE;
    m_lastStatus = 0;
 
+   m_fVLDBOutOfDate = FALSE; /* FIXME: added because it was missing */
    m_fStatusOutOfDate = TRUE;
    memset (&m_ss, 0x00, sizeof(SERVERSTATUS));
 }
index 66dd2bd..dafe174 100644 (file)
@@ -39,6 +39,7 @@ USER::USER (LPCELL lpCellParent, LPTSTR pszPrincipal, LPTSTR pszInstance)
    m_fStatusOutOfDate = TRUE;
    m_mszOwnerOf = NULL;
    m_mszMemberOf = NULL;
+   memset(&m_us, 0, sizeof(m_us));
 }
 
 
@@ -190,7 +191,7 @@ BOOL USER::RefreshStatus (BOOL fNotify, ULONG *pStatus)
                CopyAnsiToString (szLastModPrincipal, wpGetKas.wpKasPrincipalGet.Data.lastModPrincipal.principal);
                CopyAnsiToString (szLastModInstance, wpGetKas.wpKasPrincipalGet.Data.lastModPrincipal.instance);
 
-               m_us.KASINFO.fIsAdmin = (wpGetKas.wpKasPrincipalGet.Data.adminSetting == ADMIN) ? TRUE : FALSE;
+               m_us.KASINFO.fIsAdmin = (wpGetKas.wpKasPrincipalGet.Data.adminSetting == KAS_ADMIN) ? TRUE : FALSE;
                m_us.KASINFO.fCanGetTickets = (wpGetKas.wpKasPrincipalGet.Data.tgsSetting == TGS) ? TRUE : FALSE;
                m_us.KASINFO.fEncrypt = (wpGetKas.wpKasPrincipalGet.Data.encSetting == ENCRYPT) ? TRUE : FALSE;
                m_us.KASINFO.fCanChangePassword = (wpGetKas.wpKasPrincipalGet.Data.cpwSetting == CHANGE_PASSWORD) ? TRUE : FALSE;
index db8a125..a7b92bd 100644 (file)
@@ -357,7 +357,6 @@ void Alert_Scout_ServerStatus (LPIDENT lpi, ULONG status)
             lpoa->nAlerts ++;
             lpoa->aAlerts[ iInsert ].alert = alertTIMEOUT;
             lpoa->aAlerts[ iInsert ].aiTIMEOUT.status = status;
-            lpoa->aAlerts[ iInsert ].aiTIMEOUT.stLastAttempt;
             GetSystemTime (&lpoa->aAlerts[ iInsert ].aiTIMEOUT.stLastAttempt);
 
             fChanged = TRUE;
index 8249da3..59151b8 100644 (file)
@@ -210,6 +210,8 @@ void Problems_OnRefresh (HWND hDlg, LPIDENT lpi)
             GetString (szText, IDS_AGGREGATE_NO_PROBLEMS);
          else if (lpi->fIsFileset())
             GetString (szText, IDS_FILESET_NO_PROBLEMS);
+        else
+            wsprintf (szText, TEXT("UNEXPECTED CONDITION in problems.cpp"));
 
          SetDlgItemText (hDlg, IDC_PROBLEM_TEXT, szText);
          break;
index 6bfdcab..b0dbc3f 100644 (file)
@@ -280,7 +280,7 @@ void Filesets_Clonesys_OnSelect (HWND hDlg, LPSET_CLONESYS_PARAMS pcsp)
    if (!fEnable)
       CheckDlgButton (hDlg, IDC_CLONE_AGG_LIMIT, FALSE);
 
-   fEnable &= IsDlgButtonChecked (hDlg, IDC_CLONE_AGG_LIMIT) && pcsp->fEnumedAggregs;
+   fEnable = fEnable && IsDlgButtonChecked (hDlg, IDC_CLONE_AGG_LIMIT) && pcsp->fEnumedAggregs;
    EnableWindow (GetDlgItem (hDlg, IDC_CLONE_AGG), fEnable);
 
    fEnable = IsDlgButtonChecked (hDlg, IDC_CLONE_PREFIX_LIMIT);
index c02a770..d782a80 100644 (file)
@@ -306,8 +306,6 @@ afsconf_Open(register const char *adir)
                        free(tdir);
                        UNLOCK_GLOBAL_MUTEX return (struct afsconf_dir *)0;
                    }
-                   fgets(afs_confdir, 128, fp);
-                   fclose(fp);
                }
                fgets(afs_confdir, 128, fp);
                fclose(fp);
@@ -345,6 +343,7 @@ GetCellUnix(struct afsconf_dir *adir)
     strcompose(tbuffer, 256, adir->name, "/", AFSDIR_THISCELL_FILE, NULL);
     tf = fopen(tbuffer, "r");
     if (tf) {
+       /* FIXME: buffer overflow waiting to happen */
        rc = fscanf(tf, "%s", tbuffer);
        if (rc == 1) {
            adir->cellName = (char *)malloc(strlen(tbuffer) + 1);
@@ -454,6 +453,7 @@ afsconf_OpenInternal(register struct afsconf_dir *adir, char *cell,
            if (code) {
                afsconf_CloseInternal(adir);
                fclose(tf);
+               free(curEntry);
                return -1;
            }
            if (linkedcell[0] != '\0') {
@@ -571,10 +571,12 @@ ParseHostLine(char *aline, register struct sockaddr_in *addr, char *aname,
     if (*aline == '[') {
        if (aclone)
            *aclone = 1;
+       /* FIXME: length of aname unknown here */
        code = sscanf(aline, "[%d.%d.%d.%d] #%s", &c1, &c2, &c3, &c4, aname);
     } else {
        if (aclone)
            *aclone = 0;
+       /* FIXME: length of aname unknown here */
        code = sscanf(aline, "%d.%d.%d.%d #%s", &c1, &c2, &c3, &c4, aname);
     }
     if (code != 5)
@@ -601,6 +603,7 @@ ParseCellLine(register char *aline, register char *aname,
              register char *alname)
 {
     register int code;
+    /* FIXME: length of aname, alname unknown here */
     code = sscanf(aline, ">%s %s", aname, alname);
     if (code == 1)
        *alname = '\0';
index 8f28799..4001311 100644 (file)
@@ -113,7 +113,7 @@ afsconf_DeleteUser(adir, auser)
     register FILE *tf;
     register FILE *nf;
     register int flag;
-    char tname[64];
+    char tname[64 + 1];
     char *tp;
     int found;
     struct stat tstat;
@@ -198,7 +198,7 @@ afsconf_GetNthUser(adir, an, abuffer, abufferLen)
 {
     char tbuffer[256];
     register FILE *tf;
-    char tname[64];
+    char tname[64 + 1];
     register char *tp;
     register int flag;
     register afs_int32 code;
@@ -228,14 +228,14 @@ afsconf_GetNthUser(adir, an, abuffer, abufferLen)
 }
 
 /* returns true iff user is in the UserList file */
-static
+static int
 FindUser(adir, auser)
      struct afsconf_dir *adir;
      register char *auser;
 {
     char tbuffer[256];
     register bufio_p bp;
-    char tname[64];
+    char tname[64 + 1];
     register int flag;
     register afs_int32 code;
     int rc;
index 3424f7a..1da1b10 100644 (file)
@@ -286,7 +286,7 @@ backupInit()
     rx_SetRxDeadTime(60);
 
     /* VLDB initialization */
-    vldbClientInit(0, localauth, tcell, &cstruct, &ttoken);
+    code = vldbClientInit(0, localauth, tcell, &cstruct, &ttoken);
     if (code)
        return (code);
 
index b2c48f2..2bb8533 100644 (file)
@@ -961,6 +961,7 @@ verifyEntryChains(ut)
 
     static afs_int32(*checkEntry[NBLOCKTYPES]) ()
        = {
+       /* FIXME: this list does not match typeName[] and may be incorrect */
        0,                      /* free block */
            verifyVolFragEntry, verifyVolInfoEntry, verifyTapeEntry, verifyDumpEntry, 0 /* text block */
     };
index bd84edd..456d66b 100644 (file)
@@ -594,6 +594,7 @@ InsertInitOpcode(int *aargc, char **aargv)
     pinitopcode = (char *)malloc(sizeof(initcmd_opcode));
     if (!pinitopcode) {
        fprintf(stderr, "%s: Can't malloc initial opcode space\n", aargv[0]);
+       free(newargv);
        return (NULL);
     }
     strcpy(pinitopcode, initcmd_opcode);
index b96f97b..35c2bad 100644 (file)
@@ -57,7 +57,7 @@ extern int yylineno;
 char *
 xmalloc(unsigned int size)
 {
-    char *p = malloc(size);
+    char *p = (char *)malloc(size);
     if (!p) {
        perror(whoami);
        exit(1);
index 9677259..bfad14b 100644 (file)
@@ -205,7 +205,7 @@ main(int argc, char **argv)
 
     if (cml_prefix) {
        cml_string =
-           malloc(strlen("char ") + strlen(cml_prefix) + strlen(CML_STRING) +
+           (char *)malloc(strlen("char ") + strlen(cml_prefix) + strlen(CML_STRING) +
                   1);
        if (!cml_string) {
            printf("No space to use prefix in cml string, ignoring it.\n");
index 1d6411d..7595501 100644 (file)
@@ -37,7 +37,8 @@ main(int argc, char *argv[])
        if ((finfo.attrib & ~_A_ARCH) != _A_NORMAL)
            continue;
        fh = _open(finfo.name, _S_IWRITE | _O_BINARY | _S_IREAD | _O_RDWR);
-       pos = _lseek(fh, 0l, SEEK_END);
+       pos = _lseek(fh, 0L, SEEK_END);
+       buffer[0] = 0;
        _write(fh, buffer, 1);
        _chsize(fh, pos);
        _close(fh);
index 7fbc9a7..c74a1c1 100644 (file)
@@ -426,7 +426,7 @@ main(int argc, char *argv[])
            break;
        case 3:         //1.0.401 or 1.0.40a are the same; 
            if ((isdigit(*ptr) == 0)    // first 2 must be digit
-               || (isdigit(*(ptr + 1) == 0))
+               || (isdigit(*(ptr + 1)) == 0)
                || (*(ptr + 1) != '0' && isdigit(*(ptr + 2)) == 0)      // disallow 1.0.4b0  or 1.0.41a 
                )
                usuage();
@@ -452,6 +452,7 @@ main(int argc, char *argv[])
                if (isdigit(*ptr) == 0 || isdigit(*(ptr + 1)) == 0)
                    usuage();
                pat2 = atoi(ptr);
+               break;
            default:
                usuage();
            }
@@ -460,7 +461,8 @@ main(int argc, char *argv[])
        if (file == NULL)
            usuage();
        len = filelength(_fileno(file));
-       buf = (char *)malloc(len + 1);
+       save = (char *)malloc(len + 1);
+       buf = save;
        len = fread(buf, sizeof(char), len, file);
        buf[len] = 0;           //set eof
        fclose(file);
@@ -505,6 +507,7 @@ main(int argc, char *argv[])
            buf = ptr + 1;
        }
        fclose(file);
+       free(save);
        return 0;
     }
     if (strcmp(argv[1], "~") == 0) {   //check for file presence
@@ -624,7 +627,8 @@ main(int argc, char *argv[])
        if (file == NULL)
            exit(0xc000);
        len = filelength(_fileno(file));
-       ch = (char *)malloc(len + 2);
+       save = (char *)malloc(len + 2);
+       ch = save;
        *ch++ = 0;              /* a small hack to allow matching /r/n if /n is first character */
        len = fread(ch, sizeof(char), len, file);
        file = freopen(fname, "wb", file);
@@ -636,6 +640,7 @@ main(int argc, char *argv[])
            ch++;
        }
        fclose(file);
+       free(save);
        return 0;
     }
     if (strcmp(argv[1], "-") == 0) {
@@ -644,7 +649,8 @@ main(int argc, char *argv[])
        if (file == NULL)
            exit(0xc000);
        len = filelength(_fileno(file));
-       ch = (char *)malloc(len + 1);
+       save = (char *)malloc(len + 1);
+       ch = save;
        len = fread(ch, sizeof(char), len, file);
        file = freopen(fname, "wb", file);
        while (len-- > 0) {
@@ -653,6 +659,7 @@ main(int argc, char *argv[])
            ch++;
        }
        fclose(file);
+       free(save);
        return 0;
     }
     if (strstr(fname, ".et") == NULL)
@@ -661,7 +668,8 @@ main(int argc, char *argv[])
     if (file == NULL)
        exit(0xc000);
     len = filelength(_fileno(file));
-    ch = (char *)malloc(len + 1);
+    save = (char *)malloc(len + 1);
+    ch = save;
     len = fread(ch, sizeof(char), len, file);
     file = freopen(fname, "wb", file);
     while (len-- > 0) {
@@ -675,9 +683,9 @@ main(int argc, char *argv[])
        pvar[i] = argv[i + 1];
     pvar[argc - 1] = NULL;
     pvar[0] = argv[1];
-    l = _spawnvp(_P_WAIT, argv[1], pvar);
-    if (ch)
-       free(ch);
+    (void)_spawnvp(_P_WAIT, argv[1], pvar);
+    if (save)
+       free(save);
     if (pvar)
        free(pvar);
     return 0;
index fe1ee31..ba0b4db 100644 (file)
@@ -283,7 +283,7 @@ typedef union {
 #define        LOAD(d,d0,d1,bl)                d0 = (bl).b32.i0, d1 = (bl).b32.i1
 #define        LOADREG(d,d0,d1,s,s0,s1)        d0 = s0, d1 = s1
 #define        OR(d,d0,d1,bl)                  d0 |= (bl).b32.i0, d1 |= (bl).b32.i1
-#define        STORE(s,s0,s1,bl)               (bl).b32.i0 = s0, (bl).b32.i1 = s1
+#define        STORE(s,s0,s1,bl)               (bl).b32.i0 = (s0), (bl).b32.i1 = (s1)
 #define        DCL_BLOCK(d,d0,d1)              long d0, d1
 
 #if defined(LARGEDATA)
index 8d239fe..7ca92de 100644 (file)
@@ -85,8 +85,8 @@ RCSID
 /* Definitions for byte swapping */
 
 #ifdef LSBFIRST
-#define vaxtohl(x) *((afs_uint32 *)(x))
-#define vaxtohs(x) *((unsigned short *)(x))
+#define vaxtohl(x) (*((afs_uint32 *)(x)))
+#define vaxtohs(x) (*((unsigned short *)(x)))
 #else
 static afs_uint32 four_bytes_vax_to_nets();
 #define vaxtohl(x) four_bytes_vax_to_nets((char *)(x))
index c183548..f7a5548 100644 (file)
@@ -185,6 +185,7 @@ password_ok(newpw, insist)
 {
     if (insist == 0) {
        /* see if it is reasonable, but don't get so obnoxious */
+       /* FIXME: null pointer derefence!!! */
        (*insist)++;            /* so we don't get called again */
        if (strlen(newpw) < 6)
            return 0;
index 790d6c4..ec7b95a 100644 (file)
@@ -632,6 +632,7 @@ static void
 Print_bos_ProcessState_p(bos_ProcessState_p state, const char *prefix)
 {
     printf("%sProcess state:\n", prefix);
+    /* FIXME: BOS_PROCESS_OK is 0, so this test is not right */
     if (*state & BOS_PROCESS_OK) {
        printf("%s\tBOS_PROCESS_OK:\n", prefix);
     }
index 2be3e05..4de8be6 100644 (file)
@@ -150,7 +150,7 @@ Print_kas_principalEntry_p(kas_principalEntry_p principal, const char *prefix)
     for (i = 0; i < KAS_ENCRYPTION_KEY_LEN; i++) {
        printf("%d ", principal->key.key[i]);
     }
-    printf("\n", prefix);
+    printf("\n");
 
     printf("%sKey checksum %u\n", prefix, principal->keyCheckSum);
     printf("%sDays to password expire %d\n", prefix,
index 6cedbc8..76378c7 100644 (file)
@@ -4077,6 +4077,7 @@ UV_SetVolume(struct rx_connection *server, afs_int32 partition,
 
     if (tid) {
        etst = AFSVolEndTrans(server, tid, &rcode);
+       /* FIXME: this looks like a typo */
        if (etst || etst) {
            if (!tst)
                tst = (etst ? etst : rcode);
index 9128930..388987c 100644 (file)
@@ -88,7 +88,7 @@ typedef unsigned char bool;
 #define TRUE   1
 
 #ifndef MIN
-#define MIN(a,b) ((a)>(b)) ? b : a
+#define MIN(a,b) (((a)>(b)) ? (b) : (a))
 #endif
 
 #ifndef NSIG
index 31e9d04..f36b317 100644 (file)
@@ -66,10 +66,10 @@ threadname(void)
 #else /* AFS_PTHREAD_ENV */
     me = (PROCESS) LWP_ThreadId();
 #endif /* AFS_PTHREAD_ENV */
-    ptr = (char *)&MainThread;
+    ptr = &MainThread[0];
     for (i = 0; i < nThreads; i++) {
        if (ThreadId[i] == me) {
-           ptr = (char *)&ThreadName[i];
+           ptr = &ThreadName[i][0];
            break;
        }
     }
index d78ef88..e31e0c5 100644 (file)
@@ -113,7 +113,7 @@ int
 LWP_GetLine(char *linebuf, int len)
 {
     int cnt = 0;
-    char ch = '\0';
+    int ch = 0;
 
     fflush(stdin);
     /* loop until a new line has been entered */
index 7829240..274265c 100644 (file)
@@ -157,15 +157,14 @@ struct afsconf_dir *prdir;
 extern afs_int32 depthsg;
 #endif
 
-extern afs_int32 ubik_lastYesTime;
-extern afs_int32 ubik_nBuffers;
-
 extern int afsconf_ServerAuth();
 extern int afsconf_CheckAuth();
 
 int pr_realmNameLen;
 char *pr_realmName;
 
+static struct afsconf_cell info;
+
 #include "AFS_component_version_number.c"
 
 /* check whether caller is authorized to manage RX statistics */
@@ -190,7 +189,6 @@ main(int argc, char **argv)
 #if 0
     struct ktc_encryptionKey tkey;
 #endif
-    struct afsconf_cell info;
     int kerberosKeys;          /* set if found some keys */
     int lwps = 3;
     char clones[MAXHOSTSPERCELL];
index d0fe8f6..f8b532e 100644 (file)
@@ -179,7 +179,7 @@ rxi_ListenerProc(fd_set * rfds, int *tnop, struct rx_call **newcallp)
     }
     rx_listenerPid = pid;
     if (swapNameProgram)
-       (*swapNameProgram) (pid, "listener", &name);
+       (*swapNameProgram) (pid, "listener", &name[0]);
 
     for (;;) {
        /* Grab a new packet only if necessary (otherwise re-use the old one) */
index 3ab94cf..ddfd466 100644 (file)
@@ -320,8 +320,8 @@ struct rx_packet {
 /* copy data from an RX packet */
 #define rx_packetread(p, off, len, out)               \
   ( (off) + (len) > (p)->wirevec[1].iov_len ?         \
-    rx_SlowReadPacket(p, off, len, (char*)out) :             \
-    ((memcpy((char *)(out), (char*)((p)->wirevec[1].iov_base)+(off), len)),0))
+    rx_SlowReadPacket(p, off, len, (char*)(out)) :             \
+    ((memcpy((char *)(out), (char*)((p)->wirevec[1].iov_base)+(off), (len))),0))
 
 #define rx_computelen(p,l) { register int i; \
    for (l=0, i=1; i < p->niovecs; i++ ) l += p->wirevec[i].iov_len; }
index 6fd6b62..a9322d8 100644 (file)
@@ -335,7 +335,7 @@ MainCommand(as, arock)
                printf("getconn call failed with code %d\n", code);
                break;
            }
-           if (tconn.cid == 0xffffffff) {
+           if (tconn.cid == (afs_int32)0xffffffff) {
                printf("Done.\n");
                break;
            }
index e759629..c8c98c6 100644 (file)
@@ -522,6 +522,7 @@ xdr_string(register XDR * xdrs, char **cpp, u_int maxsize)
     u_int size;
     u_int nodesize;
 
+    /* FIXME: this does not look correct: MSVC 6 computes -2 here */
     if (maxsize > ((~0) >> 1) - 1)
        maxsize = ((~0) >> 1) - 1;
 
index 4980dc6..de63f66 100644 (file)
@@ -86,6 +86,7 @@ xdr_array(register XDR * xdrs, caddr_t * addrp, u_int * sizep, u_int maxsize,
     register bool_t stat = TRUE;
     register u_int nodesize;
 
+    /* FIXME: this does not look correct: MSVC 6 computes -1 / elsize here */
     i = ((~0) >> 1) / elsize;
     if (maxsize > i)
        maxsize = i;
index b4463a5..ae98591 100644 (file)
@@ -785,7 +785,7 @@ parseargs(int argc, char *argv[], struct commandline *cmd)
     int i;
     int j;
     char c;
-    char flag[(1 << 8 * sizeof(char))];
+    char flag[(1 << (8 * sizeof(char)))];
     int nflags;
 
     cmdname = argv[0];
index 1de5292..3bb4b0e 100644 (file)
@@ -354,7 +354,6 @@ UPDATE_FetchInfo(call, name)
      struct rx_call *call;
      char *name;
 {
-    int fd = -1;
     int error = 0;
     struct stat status;
     char *reqObject;
@@ -375,13 +374,9 @@ UPDATE_FetchInfo(call, name)
        }
        if ((status.st_mode & S_IFMT) != S_IFDIR) {
            printf(" file %s is not a directory \n", reqObject);
-           if (fd >= 0)
-               close(fd);
            error = -1;
        }
 
-       if (fd >= 0)
-           close(fd);
        if (!error)
            error = update_SendDirInfo(reqObject, call, &status, name);
     }
@@ -524,7 +519,7 @@ update_SendDirInfo(name, call, status, origDir)
     }
     if (error == 0) {
        fd = open(dirInfoFile, O_RDONLY, 0);
-       if (fd) {
+       if (fd >= 0) {
            fstat(fd, &tstatus);
            errcode = update_SendFile(fd, call, &tstatus);
            if (errcode)
index e664b4d..0c6769a 100644 (file)
@@ -24,12 +24,12 @@ RCSID
  *
  */
 #define        KSUCCESS        0
-#define        KFAILURE        -1
+#define        KFAILURE        (-1)
 
 int
 afs_krb_get_lrealm(char *r, int n)
 {
-    FILE *cnffile, *fopen();
+    FILE *cnffile/*, *fopen()*/;
 
     if (n > 1)
        return (KFAILURE);      /* Temporary restriction */
index 5a21714..52e450f 100644 (file)
@@ -139,7 +139,7 @@ re_comp(register char *sp)
     } else
        circf = 0;
     for (;;) {
-       if (ep >= &expbuf[ESIZE])
+       if (ep >= &expbuf[ESIZE - 10 /* fudge factor */])
            comperr(retoolong);
        if ((c = *sp++) == '\0') {
            if (bracketp != bracket)
@@ -189,13 +189,13 @@ re_comp(register char *sp)
                        *ep = ep[-1] + 1;
                        ep++;
                        cclcnt++;
-                       if (ep >= &expbuf[ESIZE])
+                       if (ep >= &expbuf[ESIZE - 10 /* fudge factor */])
                            comperr(retoolong);
                    }
                }
                *ep++ = c;
                cclcnt++;
-               if (ep >= &expbuf[ESIZE])
+               if (ep >= &expbuf[ESIZE - 10 /* fudge factor */])
                    comperr(retoolong);
            } while ((c = *sp++) != ']');
            lastep[1] = cclcnt;
index 935c63e..bfa1c4f 100644 (file)
@@ -107,7 +107,8 @@ static char *opcode_names[VL_NUMBER_OPCODESX] = {
     "ListAttributesU",
     "LinkedListU",
     "RegisterAddr",
-    "GetAddrsU" "ListAttributesN2"
+    "GetAddrsU",
+    "ListAttributesN2"
 };
 
 struct Vlent {
@@ -532,6 +533,7 @@ handleit(as)
                    ("Volumes not found in main hash tables in vldb will be fixed...\n");
                memset(&updateentry, 0, sizeof(updateentry));
                for (index = 0; 1; index = next_index) {
+                   /* FIXME: n2 is never changed for some reason */
                    int n1 = 0, n2 = 0, n3 = 0, n4 = 0;
                    memset(&entry, 0, sizeof(entry));
                    code =
index c157f3e..d828dcf 100644 (file)
@@ -1054,7 +1054,7 @@ nt_ListAFSFiles(char *dev,
 
     if (singleVolumeNumber) {
        h.ih_vid = singleVolumeNumber;
-       if (nt_HandleToVolDir(name, &h) < 0)
+       if (!nt_HandleToVolDir(name, &h))
            return -1;
        ninodes =
            nt_ListAFSSubDirs(&h, writeFun, fp, judgeFun, singleVolumeNumber);