* mk_priv.c (krb_mk_priv): Fix up call to pcbc_encrypt(). By
authorTom Yu <tlyu@mit.edu>
Wed, 24 Jun 1998 07:16:57 +0000 (07:16 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 24 Jun 1998 07:16:57 +0000 (07:16 +0000)
  taking the address of key, the 5th arg to pcbc_encrypt() was
  actually a (char **) cast to a (C_Block *).  The reason for this
  is that a C_Block (actually a des_cblock) is typedef'ed from a
  char[8], which by being in the parameters of the definition of
  krb_mk_priv() becomes of type (char *).  This means that using the
  address operator on key resulted in a pointer to a pointer to a
  char rather than a pointer to a des_cblock, which would have been
  innocuous in this case because pcbc_encrypt() actually takes a
(des_cblock *) as the 5th (ivec) argument.  The moral is to never
  pass around naked arrays as function arguments; instead, pass
  around pointers to arrays to avoid spontaneous conversions to
  pointers sneaking up.  Note that CNS actually uses a (C_Block *)
everywhere, and maybe we should as well.  *whew*

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@10603 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb4/ChangeLog
src/lib/krb4/mk_priv.c

index e588b07c9267655f82408e92caa03a985e822350..11953fb750445456ffb4cd6745c95acaf39b62aa 100644 (file)
@@ -1,3 +1,20 @@
+Wed Jun 24 03:09:28 1998  Tom Yu  <tlyu@mit.edu>
+
+       * mk_priv.c (krb_mk_priv): Fix up call to pcbc_encrypt().  By
+       taking the address of key, the 5th arg to pcbc_encrypt() was
+       actually a (char **) cast to a (C_Block *).  The reason for this
+       is that a C_Block (actually a des_cblock) is typedef'ed from a
+       char[8], which by being in the parameters of the definition of
+       krb_mk_priv() becomes of type (char *).  This means that using the
+       address operator on key resulted in a pointer to a pointer to a
+       char rather than a pointer to a des_cblock, which would have been
+       innocuous in this case because pcbc_encrypt() actually takes a
+       (des_cblock *) as the 5th (ivec) argument.  The moral is to never
+       pass around naked arrays as function arguments; instead, pass
+       around pointers to arrays to avoid spontaneous conversions to
+       pointers sneaking up.  Note that CNS actually uses a (C_Block *)
+       everywhere, and maybe we should as well.  *whew*
+
 1998-05-08  Theodore Ts'o  <tytso@rsts-11.mit.edu>
 
        * stime.c (krb_stime): 
index ceb10c8bda8821a8879883a59f03e523cffe420c..47c96f59b0c32351e643593397d97159bc2bcf97 100644 (file)
@@ -198,7 +198,7 @@ krb_mk_priv(in,out,length,schedule,key,sender,receiver)
 #ifndef NOENCRYPTION
     /* pcbc encrypt, pad as needed, use key as ivec */
     pcbc_encrypt((C_Block *) q,(C_Block *) q, (long) (p-q), schedule,
-                 (C_Block *)&key, ENCRYPT);
+                 (C_Block *)key, ENCRYPT);
 #endif /* NOENCRYPTION */
 
     return (q - out + c_length);        /* resulting size */