6e892e7
diff -ur chntpw-080526/ntreg.c chntpw-080526.novalue/ntreg.c
6e892e7
--- chntpw-080526/ntreg.c	2009-06-08 14:44:09.000000000 +0100
6e892e7
+++ chntpw-080526.novalue/ntreg.c	2009-06-08 14:43:48.000000000 +0100
6e892e7
@@ -2667,21 +2667,23 @@
6e892e7
 	      value = (char *)get_val_data(hdesc, nkofs, vex.name, vex.type, TPF_VK_EXACT);
6e892e7
 	      len = get_val_len(hdesc, nkofs, vex.name, TPF_VK_EXACT);
6e892e7
 
6e892e7
-	      if (vex.type == REG_BINARY) {
6e892e7
-		fprintf(file, "\"%s\"=hex:", vex.name);
6e892e7
-	      } else {
6e892e7
-		fprintf(file, "\"%s\"=hex(%x):", vex.name, vex.type);
6e892e7
-	      }
6e892e7
-	      byte = 0;
6e892e7
-	      while (byte < len) { /* go byte by byte.. probably slow.. */
6e892e7
-		fprintf(file, "%02x,", (unsigned char)value[byte]);
6e892e7
-		byte++;
6e892e7
-		if (!(byte % 20)) fprintf(file, "\\\r\n  ");
6e892e7
-	      }
6e892e7
-	      fprintf(file, "%02x\r\n", (unsigned char)value[byte]);
6e892e7
-            }
6e892e7
+	      if (value && len >= 0) {
6e892e7
+		if (vex.type == REG_BINARY) {
6e892e7
+		  fprintf(file, "\"%s\"=hex:", vex.name);
6e892e7
+		} else {
6e892e7
+		  fprintf(file, "\"%s\"=hex(%x):", vex.name, vex.type);
6e892e7
+		}
6e892e7
+		byte = 0;
6e892e7
+		while (byte < len) { /* go byte by byte.. probably slow.. */
6e892e7
+		  fprintf(file, "%02x,", (unsigned char)value[byte]);
6e892e7
+		  byte++;
6e892e7
+		  if (!(byte % 20)) fprintf(file, "\\\r\n  ");
6e892e7
+		}
6e892e7
+		fprintf(file, "%02x\r\n", (unsigned char)value[byte]);
6e892e7
 
6e892e7
-            FREE(vex.name);
6e892e7
+		FREE(vex.name);
6e892e7
+	      }
6e892e7
+	    }
6e892e7
         }
6e892e7
     }
6e892e7