Initial original import from: fuse-2.4.2-2.fc4
[captive.git] / src / libcaptive / client / options-module.c
index 4b4ba7d..a81c2e5 100644 (file)
@@ -32,6 +32,7 @@
 #include <openssl/md5.h>
 #include <openssl/bn.h>
 #include <openssl/crypto.h>
+#include <ctype.h>
 
 
 gboolean captive_options_module_load(struct captive_options_module *options_module,const gchar *pathname_utf8)
@@ -56,7 +57,7 @@ gboolean captive_options_module_load(struct captive_options_module *options_modu
                        && (('M'<<8U)|('Z'<<0U))==GUINT16_FROM_BE(*(const guint16 *)options_module->u.pe32.base)) {
 unsigned char md5_bin[1+128/8];        /* 128 bits==16 bytes; '1+' for leading stub to prevent shorter output of BN_bn2hex() */
 BIGNUM *bignum;
-char *hex;
+char *hex,*s;
 
                /* already done above */
                /* Calculate MD5 sum and convert it to hex string: */
@@ -68,6 +69,13 @@ char *hex;
                options_module->u.pe32.md5=g_strdup(hex+2);
                OPENSSL_free(hex);
                BN_free(bignum);
+               /* BN_bn2hex() returns uppercased string: */
+               g_assert(strlen(options_module->u.pe32.md5)==32);
+               for (s=options_module->u.pe32.md5;*s;s++) {
+                       g_assert(isxdigit(*s));
+                       *s=tolower(*s);
+                       g_assert(isxdigit(*s));
+                       }
                }
        else {
                captive_rtl_file_munmap(options_module->u.pe32.base);