Hrvoje Niksic <[EMAIL PROTECTED]> writes:

> The following patch (now applied) fixes all the bugs you noticed
> except #3.  Which means that the infrastructure is all there, all the
> right functions are called, we just need to figure out what we are
> doing wrong.

Fixed now.  It turns out the bug was in the base64 encoder, which
misencoded true binary data.  The bug has apparently always been
present, but NTLM code has made it manifest.

With this patch (now applied) in place, I can download the test on
your site by providing the right user name and password.  Again,
thanks for providing the testbed!


2005-04-23  Hrvoje Niksic  <[EMAIL PROTECTED]>

        * utils.c (base64_encode): Treat input as unsigned chars.
        Required for correct encoding of binary stuff.

Index: src/utils.c
===================================================================
RCS file: /pack/anoncvs/wget/src/utils.c,v
retrieving revision 1.92
diff -u -r1.92 utils.c
--- src/utils.c 2005/04/18 14:23:23     1.92
+++ src/utils.c 2005/04/23 00:17:49
@@ -1825,7 +1825,7 @@
 
 #endif /* not WINDOWS */
 
-/* Encode the string S of length LENGTH to base64 format and place it
+/* Encode the string STR of length LENGTH to base64 format and place it
    to B64STORE.  The output will be \0-terminated, and must point to a
    writable buffer of at least 1+BASE64_LENGTH(length) bytes.  It
    returns the length of the resulting base64 data, not counting the
@@ -1835,7 +1835,7 @@
    base64 data.  */
 
 int
-base64_encode (const char *s, int length, char *b64store)
+base64_encode (const char *str, int length, char *b64store)
 {
   /* Conversion table.  */
   static char tbl[64] = {
@@ -1849,7 +1849,8 @@
     '4','5','6','7','8','9','+','/'
   };
   int i;
-  unsigned char *p = (unsigned char *) b64store;
+  const unsigned char *s = (const unsigned char *) str;
+  char *p = b64store;
 
   /* Transform the 3x8 bits to 4x6 bits, as required by base64.  */
   for (i = 0; i < length; i += 3)
@@ -1870,7 +1871,7 @@
   /* ...and zero-terminate it.  */
   *p = '\0';
 
-  return p - (unsigned char *) b64store;
+  return p - b64store;
 }
 
 #define IS_ASCII(c) (((c) & 0x80) == 0)

Reply via email to