Hi,

When I was trying to use md5check.exe in R on Windows, I found that it is
actually crashed for R-2.7.2 and R-2.6.2 (R-2.5.1 seems to be ok).

As I looked into the code (src/gnuwin32/front-ends/md5check.c), I think that
there might be several bugs in the code:

(1) A "segmentation fault" occurred in read_unist_file("unins000.dat"). I
guess that the file pointer didn't stop when it reached EOF.

(2) For some reason, the lastest version of "snprintf" appended '\0' to the
string, so the following line:
       for(j = 0; j < 16; j++) snprintf (out+2*j, 2, "%02x", resblock[j]);
produced a (MD5) strings with '\0' at every even position.

(3) When there is no unins000.dat file, md5check.exe won't report any
missing files.

I think the last two "bugs" can be fixed by the following minor changes:

=============================

--- R-2.7.2/src/gnuwin32/front-ends/md5check.c  (revision 167)
+++ R-2.7.2/src/gnuwin32/front-ends/md5check.c  (working copy)
@@ -157,7 +157,7 @@
 #ifdef DEBUG
            printf("missing\n");
 #endif
-           if(found) {
+           if(found||nnames==0) {
                fprintf(stderr, "file %s: missing\n", line+34);
                miss++;
            }
@@ -171,7 +171,7 @@
 #endif
            continue;
        } else {
-           for(j = 0; j < 16; j++) snprintf (out+2*j, 2, "%02x",
resblock[j]);
+           for(j = 0; j < 16; j++) snprintf (out+2*j, 3, "%02x",
resblock[j]);
            out[32] = '\0';
            if(strcmp(onfile, out) == 0) {
 #ifdef DEBUG

=============================

I didn't fix the first one, because I am not familiar with the format of
unins000.dat.

Thanks,

Alex


###########################
Alex Chen, Ph.D.
REvolution Computing
1100 Dexter Ave. N, Suite 200
Tel: 206-577-4778
###########################

	[[alternative HTML version deleted]]

