1234567891011121314151617181920212223242526272829303132333435 |
- diff -u chntpw-140201.orig/ntreg.c chntpw-140201/ntreg.c
- --- chntpw-140201.orig/ntreg.c 2019-06-22 13:09:59.583717369 -0700
- +++ chntpw-140201/ntreg.c 2019-06-22 13:16:26.714726148 -0700
- @@ -4241,10 +4241,13 @@
- do { /* On some platforms read may not block, and read in chunks. handle that */
- r = read(hdesc->filedesc, hdesc->buffer + rt, hdesc->size - rt);
- rt += r;
- - } while ( !errno && (rt < hdesc->size) );
- + } while ( r > 0 && (rt < hdesc->size) );
-
- - if (errno) {
- - perror("openHive(): read error: ");
- + if (r <= 0) {
- + if (r < 0)
- + perror("openHive(): read error");
- + else
- + fprintf(stderr, "openHive(): read error: unexpected EOF\n");
- closeHive(hdesc);
- return(NULL);
- }
- @@ -4255,10 +4258,10 @@
- return(NULL);
- }
-
- - if (r < sizeof (*hdesc)) {
- + if (rt < sizeof (*hdesc)) {
- fprintf(stderr,
- - "file is too small; got %d bytes while expecting %d or more\n",
- - r, sizeof (*hdesc));
- + "file is too small; got %d bytes while expecting %zu or more\n",
- + rt, sizeof (*hdesc));
- closeHive(hdesc);
- return(NULL);
- }
|