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