Loading...
gen/crypt.c Libc-391 Libc-763.11
--- Libc/Libc-391/gen/crypt.c
+++ Libc/Libc-763.11/gen/crypt.c
@@ -131,11 +131,12 @@
 #endif
 #ifndef BUILDING_VARIANT
 STATIC void init_des(), init_perm(), permute();
+#ifdef DEBUG
+#include <stdio.h>
+STATIC void prtab();
+#endif
 #endif /* BUILDING_VARIANT */
 __private_extern__ int __crypt_des_cipher(), __crypt_des_setkey();
-#ifdef DEBUG
-STATIC prtab();
-#endif
 
 /* ==================================== */
 
@@ -342,6 +343,11 @@
 #endif /* BUILDING_VARIANT */
 #endif /* LARGEDATA */
 
+#ifndef BUILDING_VARIANT
+__private_extern__ int __crypt_des_setkey_called = 0;
+#else /* BUILDING_VARIANT */
+__private_extern__ int __crypt_des_setkey_called;
+#endif /* BUILDING_VARIANT */
 
 /* =====  (mostly) Standard DES Tables ==================== */
 
@@ -639,6 +645,7 @@
 		PERM6464(K,K0,K1,(unsigned char *)key,ptabp);
 		STORE(K&~0x03030303L, K0&~0x03030303L, K1, *(C_block *)key);
 	}
+	__crypt_des_setkey_called = 1;
 	return (0);
 }
 
@@ -983,6 +990,12 @@
 	register int i, j, k;
 	C_block cblock;
 
+	/* Prevent encrypt from crashing if setkey was never called.
+	 * This does not make a good cypher */
+	if (!__crypt_des_setkey_called) {
+		cblock.b32.i0 = cblock.b32.i1 = 0;
+		__crypt_des_setkey((char *)cblock.b);
+	}
 	for (i = 0; i < 8; i++) {
 		k = 0;
 		for (j = 0; j < 8; j++) {
@@ -1011,7 +1024,7 @@
 
 #ifndef BUILDING_VARIANT
 #ifdef DEBUG
-STATIC
+STATIC void
 prtab(s, t, num_rows)
 	char *s;
 	unsigned char *t;