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