diff -urpN john-1.7.8-jumbo-8b/src/MSCHAPv2_fmt_plug.c john-1.7.8-jumbo-8a/src/MSCHAPv2_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/MSCHAPv2_fmt_plug.c	2011-11-08 18:28:09.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/MSCHAPv2_fmt_plug.c	2011-11-12 00:34:35.437500000 +0000
@@ -156,6 +156,8 @@ static char *mschapv2_prepare(char *spli
 
 	if (!strncmp(split_fields[1], "$MSCHAPv2$", 10))
 		return split_fields[1];
+	if (!split_fields[0]||!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
 	if (strlen(split_fields[3]) != CHALLENGE_LENGTH/2)
 		return split_fields[1];
 	if (strlen(split_fields[4]) != CIPHERTEXT_LENGTH)
diff -urpN john-1.7.8-jumbo-8b/src/NETLM_fmt_plug.c john-1.7.8-jumbo-8a/src/NETLM_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/NETLM_fmt_plug.c	2011-09-20 16:02:45.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/NETLM_fmt_plug.c	2011-11-12 00:35:41.390625000 +0000
@@ -129,6 +129,8 @@ static char *netlm_prepare(char *split_f
 	char *cp;
 	if (!strncmp(split_fields[1], "$NETLM$", 7))
 		return split_fields[1];
+	if (!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
 	if (strlen(split_fields[3]) != CIPHERTEXT_LENGTH)
 		return split_fields[1];
 
diff -urpN john-1.7.8-jumbo-8b/src/NETLMv2_fmt_plug.c john-1.7.8-jumbo-8a/src/NETLMv2_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/NETLMv2_fmt_plug.c	2011-11-08 18:28:34.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/NETLMv2_fmt_plug.c	2011-11-12 00:36:29.875000000 +0000
@@ -190,6 +190,9 @@ static char *netlmv2_prepare(char *split
 
 	if (!strncmp(split_fields[1], "$NETLMv2$", 9))
 		return split_fields[1];
+	if (!split_fields[0]||!split_fields[2]||!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
+
 	/* DOMAIN\USER: -or- USER::DOMAIN: */
 	if ((tmp = strstr(login, "\\")) != NULL) {
 		identity = (char *) mem_alloc(strlen(login));
diff -urpN john-1.7.8-jumbo-8b/src/NETNTLM_fmt_plug.c john-1.7.8-jumbo-8a/src/NETNTLM_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/NETNTLM_fmt_plug.c	2011-09-20 15:57:02.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/NETNTLM_fmt_plug.c	2011-11-12 00:37:40.203125000 +0000
@@ -147,6 +147,9 @@ static char *netntlm_prepare(char *split
 
 	if (!strncmp(split_fields[1], "$NETNTLM$", 9))
 		return split_fields[1];
+	if (!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
+
 	if (strlen(split_fields[4]) != CIPHERTEXT_LENGTH)
 		return split_fields[1];
 
diff -urpN john-1.7.8-jumbo-8b/src/NETNTLMv2_fmt_plug.c john-1.7.8-jumbo-8a/src/NETNTLMv2_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/NETNTLMv2_fmt_plug.c	2011-11-08 18:28:34.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/NETNTLMv2_fmt_plug.c	2011-11-12 00:38:06.625000000 +0000
@@ -197,6 +197,9 @@ static char *netntlmv2_prepare(char *spl
 
 	if (!strncmp(split_fields[1], "$NETNTLMv2$", 11))
 		return split_fields[1];
+	if (!split_fields[0]||!split_fields[2]||!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
+
 	/* DOMAIN\USER: -or- USER::DOMAIN: */
 	if ((tmp = strstr(login, "\\")) != NULL) {
 		identity = (char *) mem_alloc(strlen(login));
diff -urpN john-1.7.8-jumbo-8b/src/NETSPLITLM_fmt_plug.c john-1.7.8-jumbo-8a/src/NETSPLITLM_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/NETSPLITLM_fmt_plug.c	2011-09-14 17:11:19.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/NETSPLITLM_fmt_plug.c	2011-11-12 00:38:30.968750000 +0000
@@ -110,6 +110,9 @@ static char *nethalflm_prepare(char *spl
 
 	if (!strncmp(split_fields[1], "$NETHALFLM$", 11))
 		return split_fields[1];
+	if (!split_fields[3]||!split_fields[4]||!split_fields[5])
+		return split_fields[1];
+
 	if (strlen(split_fields[3]) != CIPHERTEXT_LENGTH)
 		return split_fields[1];
 
diff -urpN john-1.7.8-jumbo-8b/src/XSHA512_fmt.c john-1.7.8-jumbo-8a/src/XSHA512_fmt.c
--- john-1.7.8-jumbo-8b/src/XSHA512_fmt.c	2011-11-08 18:26:02.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/XSHA512_fmt.c	2011-11-12 00:39:59.515625000 +0000
@@ -75,6 +75,8 @@ static char *prepare(char *split_fields[
 	char Buf[200];
 	if (!strncmp(split_fields[1], "$LION$", 6))
 		return split_fields[1];
+	if (!split_fields[0])
+		return split_fields[1];
 	if (split_fields[0] && strlen(split_fields[0]) == CIPHERTEXT_LENGTH) {
 		sprintf(Buf, "$LION$%s", split_fields[0]);
 		if (valid(Buf, pFmt)) {
diff -urpN john-1.7.8-jumbo-8b/src/loader.c john-1.7.8-jumbo-8a/src/loader.c
--- john-1.7.8-jumbo-8b/src/loader.c	2011-11-08 19:18:10.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/loader.c	2011-11-12 00:30:29.843750000 +0000
@@ -577,10 +577,13 @@ static void ldr_load_pot_line(struct db_
 	void *binary;
 	int hash;
 	struct db_password *current;
-	char *flds[10] = {0};
+	char *flds[10];
+	int i;
 
 	options.loadingpot = 1;
 	unprepared = ldr_get_field(&line, db->options->field_sep_char);
+	for (i = 0; i < 10; ++i)
+		flds[i] = "";
 	flds[1] = unprepared;
 	ciphertext = format->methods.prepare(flds, format);
 	if (format->methods.valid(ciphertext,format) != 1) return;
diff -urpN john-1.7.8-jumbo-8b/src/mscash1_fmt_plug.c john-1.7.8-jumbo-8a/src/mscash1_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/mscash1_fmt_plug.c	2011-09-20 15:58:12.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/mscash1_fmt_plug.c	2011-11-12 00:32:57.828125000 +0000
@@ -201,7 +201,7 @@ static int valid(char *ciphertext, struc
 static char *prepare(char *split_fields[10], struct fmt_main *pFmt)
 {
 	char *cp;
-	if (!strncmp(split_fields[1], "M$", 2))
+	if (!strncmp(split_fields[1], "M$", 2) || !split_fields[0])
 		return split_fields[1];
 	cp = mem_alloc(strlen(split_fields[0]) + strlen(split_fields[1]) + 4);
 	sprintf (cp, "M$%s#%s", split_fields[0], split_fields[1]);
diff -urpN john-1.7.8-jumbo-8b/src/mscash2_fmt_plug.c john-1.7.8-jumbo-8a/src/mscash2_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/mscash2_fmt_plug.c	2011-11-08 20:41:06.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/mscash2_fmt_plug.c	2011-11-12 00:33:27.796875000 +0000
@@ -295,6 +295,8 @@ static char *prepare(char *split_fields[
 	char *cp;
 	if (!strncmp(split_fields[1], "$DCC2$", 6) && valid(split_fields[1], pFmt))
 		return split_fields[1];
+	if (!split_fields[0])
+		return split_fields[1];
 	cp = mem_alloc(strlen(split_fields[0]) + strlen(split_fields[1]) + 14);
 	sprintf (cp, "$DCC2$10240#%s#%s", split_fields[0], split_fields[1]);
 	if (valid(cp, pFmt))
diff -urpN john-1.7.8-jumbo-8b/src/oracle_fmt_plug.c john-1.7.8-jumbo-8a/src/oracle_fmt_plug.c
--- john-1.7.8-jumbo-8b/src/oracle_fmt_plug.c	2011-11-08 20:15:21.000000000 +0000
+++ john-1.7.8-jumbo-8a/src/oracle_fmt_plug.c	2011-11-12 00:39:19.687500000 +0000
@@ -120,6 +120,8 @@ static char *prepare(char *split_fields[
 
 	if (!strncmp(split_fields[1], "O$", 2))
 		return split_fields[1];
+	if (!split_fields[0])
+		return split_fields[1];
 	cp = mem_alloc(strlen(split_fields[0]) + strlen(split_fields[1]) + 4);
 	sprintf (cp, "O$%s#%s", split_fields[0], split_fields[1]);
 	if (valid(cp, pFmt))
