Merge pull request #153 from gm4tr1x/missingcheck
authorJens Steube <jens.steube@gmail.com>
Sun, 24 Jan 2016 15:24:57 +0000 (16:24 +0100)
committerJens Steube <jens.steube@gmail.com>
Sun, 24 Jan 2016 15:24:57 +0000 (16:24 +0100)
Added missing check for in_len in _old_apply_rule function

1  2 
src/shared.c

diff --combined src/shared.c
@@@ -97,7 -97,7 +97,7 @@@ void log_final (FILE *fp, const char *f
      fputc ('\r', fp);
    }
  
 -  char s[4096];
 +  char s[4096] = { 0 };
  
    int max_len = (int) sizeof (s);
  
@@@ -630,7 -630,7 +630,7 @@@ static void AES128_decrypt_cbc (const u
  
    AES_set_decrypt_key ((const u8 *) key, 128, &skey);
  
 -  u32 _iv[4];
 +  u32 _iv[4] = { 0 };
  
    _iv[0] = iv[0];
    _iv[1] = iv[1];
  
    for (int i = 0; i < 16; i += 4)
    {
 -    u32 _in[4];
 -    u32 _out[4];
 +    u32 _in[4] = { 0 };
 +    u32 _out[4] = { 0 };
  
      _in[0] = in[i + 0];
      _in[1] = in[i + 1];
@@@ -670,7 -670,9 +670,7 @@@ static void juniper_decrypt_hash (char 
  {
    // base64 decode
  
 -  u8 base64_buf[100];
 -
 -  memset (base64_buf, 0, sizeof (base64_buf));
 +  u8 base64_buf[100] = { 0 };
  
    base64_decode (base64_to_int, (const u8 *) in, DISPLAY_LEN_MIN_501, base64_buf);
  
  
    // reversed key
  
 -  u32 juniper_key[4];
 +  u32 juniper_key[4] = { 0 };
  
    juniper_key[0] = byte_swap_32 (0xa6707a7e);
    juniper_key[1] = byte_swap_32 (0x8df91059);
@@@ -2446,7 -2448,7 +2446,7 @@@ int tty_getchar(
    // Then it wants to read with getche () a keyboard input
    // which has never been made.
  
 -  INPUT_RECORD buf[100];
 +  INPUT_RECORD buf[100] = { 0 };
  
    DWORD num = 0;
  
@@@ -2605,7 -2607,7 +2605,7 @@@ char *logfile_generate_topid (
  
    char *topid = (char *) mymalloc (1 + 16 + 1);
  
 -  sprintf (topid, "TOP%08x", id);
 +  snprintf (topid, 1 + 16, "TOP%08x", id);
  
    return topid;
  }
@@@ -2616,7 -2618,7 +2616,7 @@@ char *logfile_generate_subid (
  
    char *subid = (char *) mymalloc (1 + 16 + 1);
  
 -  sprintf (subid, "SUB%08x", id);
 +  snprintf (subid, 1 + 16, "SUB%08x", id);
  
    return subid;
  }
@@@ -3339,6 -3341,8 +3339,6 @@@ void mp_add_cs_buf (uint *in_buf, size_
  
    uint *css_uniq = (uint *) mymalloc (css_uniq_sz);
  
 -  memset (css_uniq, 0, css_uniq_sz);
 -
    size_t i;
  
    for (i = 0; i < cs->cs_len; i++)
@@@ -3602,7 -3606,9 +3602,7 @@@ void mp_setup_sys (cs_t *mp_sys
  {
    uint pos;
    uint chr;
 -  uint donec[CHARSIZ];
 -
 -  memset (donec, 0, sizeof (donec));
 +  uint donec[CHARSIZ] = { 0 };
  
    for (pos = 0, chr =  'a'; chr <=  'z'; chr++) { donec[chr] = 1;
                                                    mp_sys[0].cs_buf[pos++] = chr;
@@@ -3637,7 -3643,9 +3637,7 @@@ void mp_setup_usr (cs_t *mp_sys, cs_t *
    }
    else
    {
 -    char mp_file[1024];
 -
 -    memset (mp_file, 0, sizeof (mp_file));
 +    char mp_file[1024] = { 0 };
  
      size_t len = fread (mp_file, 1, sizeof (mp_file) - 1, fp);
  
@@@ -3819,7 -3827,9 +3819,7 @@@ void sp_setup_tbl (const char *shared_d
  
    if (hcstat == NULL)
    {
 -    char hcstat_tmp[256];
 -
 -    memset (hcstat_tmp, 0, sizeof (hcstat_tmp));
 +    char hcstat_tmp[256] = { 0 };
  
      snprintf (hcstat_tmp, sizeof (hcstat_tmp) - 1, "%s/%s", shared_dir, SP_HCSTAT);
  
    {
      log_error ("%s: Could not load data", hcstat);
  
 +    fclose (fd);
 +
      exit (-1);
    }
  
    {
      log_error ("%s: Could not load data", hcstat);
  
 +    fclose (fd);
 +
      exit (-1);
    }
  
@@@ -4124,9 -4130,9 +4124,9 @@@ char *get_exec_path (
  
    #ifdef LINUX
  
 -  char tmp[32];
 +  char tmp[32] = { 0 };
  
 -  sprintf (tmp, "/proc/%d/exe", getpid ());
 +  snprintf (tmp, sizeof (tmp) - 1, "/proc/%d/exe", getpid ());
  
    const int len = readlink (tmp, exec_path, exec_path_len - 1);
  
@@@ -4182,11 -4188,9 +4182,11 @@@ char *get_profile_dir (const char *home
  {
    #define DOT_HASHCAT ".hashcat"
  
 -  char *profile_dir = (char *) mymalloc (strlen (homedir) + 1 + strlen (DOT_HASHCAT) + 1);
 +  size_t len = strlen (homedir) + 1 + strlen (DOT_HASHCAT);
 +
 +  char *profile_dir = (char *) mymalloc (len + 1);
  
 -  sprintf (profile_dir, "%s/%s", homedir, DOT_HASHCAT);
 +  snprintf (profile_dir, len, "%s/%s", homedir, DOT_HASHCAT);
  
    return profile_dir;
  }
@@@ -4195,11 -4199,9 +4195,11 @@@ char *get_session_dir (const char *prof
  {
    #define SESSIONS_FOLDER "sessions"
  
 -  char *session_dir = (char *) mymalloc (strlen (profile_dir) + 1 + strlen (SESSIONS_FOLDER) + 1);
 +  size_t len = strlen (profile_dir) + 1 + strlen (SESSIONS_FOLDER);
  
 -  sprintf (session_dir, "%s/%s", profile_dir, SESSIONS_FOLDER);
 +  char *session_dir = (char *) mymalloc (len + 1);
 +
 +  snprintf (session_dir, len, "%s/%s", profile_dir, SESSIONS_FOLDER);
  
    return session_dir;
  }
@@@ -5795,7 -5797,7 +5795,7 @@@ void ascii_digest (char out_buf[4096], 
  
    uint len = 4096;
  
 -  uint digest_buf[64];
 +  uint digest_buf[64] = { 0 };
  
    u64 *digest_buf64 = (u64 *) digest_buf;
  
  
      if (opts_type & OPTS_TYPE_ST_HEX)
      {
 -      char tmp[64];
 -
 -      memset (tmp, 0, sizeof (tmp));
 +      char tmp[64] = { 0 };
  
        for (uint i = 0, j = 0; i < len; i += 1, j += 2)
        {
    // some modes require special encoding
    //
  
 -  uint out_buf_plain[256];
 -  uint out_buf_salt[256];
 +  uint out_buf_plain[256] = { 0 };
 +  uint out_buf_salt[256] = { 0 };
  
 -  char tmp_buf[1024];
 -
 -  memset (out_buf_plain, 0, sizeof (out_buf_plain));
 -  memset (out_buf_salt,  0, sizeof (out_buf_salt));
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  char tmp_buf[1024] = { 0 };
  
    char *ptr_plain = (char *) out_buf_plain;
    char *ptr_salt  = (char *) out_buf_salt;
  
    if (hash_mode == 22)
    {
 -    char username[30];
 -
 -    memset (username, 0, sizeof (username));
 +    char username[30] = { 0 };
  
      memcpy (username, salt.salt_buf, salt.salt_len - 22);
  
  
      wpa_t *wpa = &wpas[salt_pos];
  
 -    uint pke[25];
 +    uint pke[25] = { 0 };
  
      char *pke_ptr = (char *) pke;
  
        pke[i] = byte_swap_32 (wpa->pke[i]);
      }
  
 -    unsigned char mac1[6];
 -    unsigned char mac2[6];
 +    unsigned char mac1[6] = { 0 };
 +    unsigned char mac2[6] = { 0 };
  
      memcpy (mac1, pke_ptr + 23, 6);
      memcpy (mac2, pke_ptr + 29, 6);
  
      netntlm_t *netntlm = &netntlms[salt_pos];
  
 -    char user_buf[64];
 -    char domain_buf[64];
 -    char srvchall_buf[1024];
 -    char clichall_buf[1024];
 -
 -    memset (user_buf,     0, sizeof (user_buf));
 -    memset (domain_buf,   0, sizeof (domain_buf));
 -    memset (srvchall_buf, 0, sizeof (srvchall_buf));
 -    memset (clichall_buf, 0, sizeof (clichall_buf));
 +    char user_buf[64] = { 0 };
 +    char domain_buf[64] = { 0 };
 +    char srvchall_buf[1024] = { 0 };
 +    char clichall_buf[1024] = { 0 };
  
      for (uint i = 0, j = 0; j < netntlm->user_len; i += 1, j += 2)
      {
  
      netntlm_t *netntlm = &netntlms[salt_pos];
  
 -    char user_buf[64];
 -    char domain_buf[64];
 -    char srvchall_buf[1024];
 -    char clichall_buf[1024];
 -
 -    memset (user_buf,     0, sizeof (user_buf));
 -    memset (domain_buf,   0, sizeof (domain_buf));
 -    memset (srvchall_buf, 0, sizeof (srvchall_buf));
 -    memset (clichall_buf, 0, sizeof (clichall_buf));
 +    char user_buf[64] = { 0 };
 +    char domain_buf[64] = { 0 };
 +    char srvchall_buf[1024] = { 0 };
 +    char clichall_buf[1024] = { 0 };
  
      for (uint i = 0, j = 0; j < netntlm->user_len; i += 1, j += 2)
      {
  
      pbkdf2_sha512_t *pbkdf2_sha512  = &pbkdf2_sha512s[salt_pos];
  
 -    uint esalt[16];
 +    uint esalt[8] = { 0 };
  
      esalt[0] = byte_swap_32 (pbkdf2_sha512->salt_buf[0]);
      esalt[1] = byte_swap_32 (pbkdf2_sha512->salt_buf[1]);
      u8 *ptr_timestamp = (u8 *) krb5pa->timestamp;
      u8 *ptr_checksum  = (u8 *) krb5pa->checksum;
  
 -    char data[128];
 +    char data[128] = { 0 };
  
      char *ptr_data = data;
  
  
      cloudkey_t *cloudkey = &cloudkeys[salt_pos];
  
 -    char data_buf[4096];
 +    char data_buf[4096] = { 0 };
  
      for (int i = 0, j = 0; i < 512; i += 1, j += 8)
      {
  
      androidfde_t *androidfde = &androidfdes[salt_pos];
  
 -    char tmp[3073];
 +    char tmp[3073] = { 0 };
  
      for (uint i = 0, j = 0; i < 384; i += 1, j += 8)
      {
      uint r = salt.scrypt_r;
      uint p = salt.scrypt_p;
  
 -    char base64_salt[32];
 -
 -    memset (base64_salt, 0, 32);
 +    char base64_salt[32] = { 0 };
  
      base64_encode (int_to_base64, (const u8 *) salt.salt_buf, salt.salt_len, (u8 *) base64_salt);
  
      digest_buf[7] = byte_swap_32 (digest_buf[7]);
      digest_buf[8] = 0; // needed for base64_encode ()
  
 -    char tmp_buf[64];
 -    memset (tmp_buf, 0, sizeof (tmp_buf));
 +    char tmp_buf[64] = { 0 };
  
      base64_encode (int_to_itoa64, (const u8 *) digest_buf, 32, (u8 *) tmp_buf);
      tmp_buf[43] = 0; // cut it here
      digest_buf[7] = byte_swap_32 (digest_buf[7]);
      digest_buf[8] = 0; // needed for base64_encode ()
  
 -    char tmp_buf[64];
 -    memset (tmp_buf, 0, sizeof (tmp_buf));
 +    char tmp_buf[64] = { 0 };
  
      base64_encode (int_to_itoa64, (const u8 *) digest_buf, 32, (u8 *) tmp_buf);
      tmp_buf[43] = 0; // cut it here
      digest_buf[7] = byte_swap_32 (digest_buf[7]);
      digest_buf[8] = 0; // needed for base64_encode ()
  
 -    char tmp_buf[64];
 -    memset (tmp_buf, 0, sizeof (tmp_buf));
 +    char tmp_buf[64] = { 0 };
  
      base64_encode (int_to_base64, (const u8 *) digest_buf, 32, (u8 *) tmp_buf);
  
  
      // challenge
  
 -    char challenge[100];
 -
 -    memset (challenge, 0, sizeof (challenge));
 +    char challenge[100] = { 0 };
  
      base64_encode (int_to_base64, (const u8 *) salt.salt_buf, salt.salt_len, (u8 *) challenge);
  
      // response
  
 -    char tmp_buf[100];
 +    char tmp_buf[100] = { 0 };
  
      uint tmp_len = snprintf (tmp_buf, 100, "%s %08x%08x%08x%08x",
        (char *) cram_md5->user,
        digest_buf[2],
        digest_buf[3]);
  
 -    char response[100];
 -
 -    memset (response, 0, sizeof (response));
 +    char response[100] = { 0 };
  
      base64_encode (int_to_base64, (const u8 *) tmp_buf, tmp_len, (u8 *) response);
  
    }
    else if (hash_mode == 10300)
    {
 -    char tmp_buf[100];
 -
 -    memset (tmp_buf, 0, sizeof (tmp_buf));
 +    char tmp_buf[100] = { 0 };
  
      memcpy (tmp_buf +  0, digest_buf, 20);
      memcpy (tmp_buf + 20, salt.salt_buf, salt.salt_len);
  
      // base64 encode it
  
 -    char base64_encoded[100];
 -
 -    memset (base64_encoded, 0, sizeof (base64_encoded));
 +    char base64_encoded[100] = { 0 };
  
      base64_encode (int_to_base64, (const u8 *) tmp_buf, tmp_len, (u8 *) base64_encoded);
  
    {
      // encode iteration count
  
 -    char salt_iter[5];
 +    char salt_iter[5] = { 0 };
  
      salt_iter[0] = int_to_itoa64 ((salt.salt_iter      ) & 0x3f);
      salt_iter[1] = int_to_itoa64 ((salt.salt_iter >>  6) & 0x3f);
        digest_buf[ 2] = byte_swap_32 (digest_buf[ 2]);
        digest_buf[ 3] = byte_swap_32 (digest_buf[ 3]);
  
 -      char buf[16];
 +      char buf[16] = { 0 };
  
        memcpy (buf + 0, salt.salt_buf, 5);
        memcpy (buf + 5, digest_buf, 9);
      }
      else if (hash_type == HASH_TYPE_LOTUS8)
      {
 -      char buf[52];
 -
 -      memset (buf, 0, sizeof (buf));
 +      char buf[52] = { 0 };
  
        // salt
  
@@@ -8480,7 -8516,7 +8480,7 @@@ void to_hccap_t (hccap_t *hccap, uint s
  
    if (wpa->keyver != 1)
    {
 -    uint eapol_tmp[64];
 +    uint eapol_tmp[64] = { 0 };
  
      for (uint i = 0; i < 64; i++)
      {
      memcpy (hccap->eapol, wpa->eapol, wpa->eapol_size);
    }
  
 -  uint pke_tmp[25];
 +  uint pke_tmp[25] = { 0 };
  
    for (int i = 5; i < 25; i++)
    {
  
    if (wpa->keyver != 1)
    {
 -    uint digest_tmp[4];
 +    uint digest_tmp[4] = { 0 };
  
      digest_tmp[0] = byte_swap_32 (digest_ptr[0]);
      digest_tmp[1] = byte_swap_32 (digest_ptr[1]);
@@@ -8705,11 -8741,13 +8705,11 @@@ restore_data_t *init_restore (int argc
  
        if (rd->pid)
        {
 -        char pidbin[BUFSIZ];
 +        char pidbin[BUFSIZ] = { 0 };
  
 -        int pidbin_len;
 +        int pidbin_len = -1;
  
          #ifdef _POSIX
 -        memset (pidbin, 0, sizeof (pidbin));
 -
          snprintf (pidbin, sizeof (pidbin) - 1, "/proc/%d/cmdline", rd->pid);
  
          FILE *fd = fopen (pidbin, "rb");
          #elif _WIN
          HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, rd->pid);
  
 -        char pidbin2[BUFSIZ];
 -
 -        int pidbin2_len;
 +        char pidbin2[BUFSIZ] = { 0 };
  
 -        memset (pidbin2, 0, sizeof (pidbin2));
 +        int pidbin2_len = -1;
  
          pidbin_len = GetModuleFileName (NULL, pidbin, BUFSIZ);
          pidbin2_len = GetModuleFileNameEx (hProcess, NULL, pidbin2, BUFSIZ);
@@@ -8817,7 -8857,7 +8817,7 @@@ void read_restore (const char *eff_rest
  
    for (uint i = 0; i < rd->argc; i++)
    {
 -    char buf[BUFSIZ];
 +    char buf[BUFSIZ] = { 0 };
  
      if (fgets (buf, BUFSIZ - 1, fp) == NULL)
      {
  
    fclose (fp);
  
 -  char new_cwd[256];
 +  char new_cwd[1024] = { 0 };
  
    char *nwd = getcwd (new_cwd, sizeof (new_cwd));
  
      log_info ("WARNING: Found old restore file, updating path to %s...", new_cwd);
    }
  
 -
    if (chdir (rd->cwd))
    {
      log_error ("ERROR: cannot chdir to %s: %s", rd->cwd, strerror (errno));
@@@ -9350,13 -9391,14 +9350,13 @@@ uint set_kernel_loops (uint hash_mode
  
  uint parse_and_store_salt (char *out, char *in, uint salt_len)
  {
 -  u8 tmp[256];
 +  u8 tmp[256] = { 0 };
  
    if (salt_len > sizeof (tmp))
    {
      return UINT_MAX;
    }
  
 -  memset (tmp, 0, sizeof (tmp));
    memcpy (tmp, in, salt_len);
  
    if (data.opts_type & OPTS_TYPE_ST_HEX)
@@@ -9489,7 -9531,9 +9489,7 @@@ int bcrypt_parse_hash (char *input_buf
  
    salt->salt_len = salt_len;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (bf64_to_int, (const u8 *) salt_pos, 22, tmp_buf);
  
@@@ -9528,7 -9572,9 +9528,7 @@@ int cisco4_parse_hash (char *input_buf
  
    u32 *digest = (u32 *) hash_buf->digest;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (itoa64_to_int, (const u8 *) input_buf, 43, tmp_buf);
  
@@@ -9715,7 -9761,7 +9715,7 @@@ int netscreen_parse_hash (char *input_b
  
    // unscramble
  
 -  char clean_input_buf[32];
 +  char clean_input_buf[32] = { 0 };
  
    char sig[6] = { 'n', 'r', 'c', 's', 't', 'n' };
    int  pos[6] = {   0,   6,  12,  17,  23,  29 };
@@@ -10320,7 -10366,9 +10320,7 @@@ int episerver_parse_hash (char *input_b
  
    salt->salt_len = salt_len;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (base64_to_int, (const u8 *) hash_pos, 27, tmp_buf);
  
@@@ -10362,7 -10410,9 +10362,7 @@@ int descrypt_parse_hash (char *input_bu
  
    salt->salt_len = 2;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (itoa64_to_int, (const u8 *) input_buf + 2, 11, tmp_buf);
  
@@@ -10801,7 -10851,7 +10801,7 @@@ int netntlmv1_parse_hash (char *input_b
  
    /* special case, last 8 byte do not need to be checked since they are brute-forced next */
  
 -  uint digest_tmp[2];
 +  uint digest_tmp[2] = { 0 };
  
    digest_tmp[0] = hex_to_u32 ((const u8 *) &hash_pos[32]);
    digest_tmp[1] = hex_to_u32 ((const u8 *) &hash_pos[40]);
    {
      if ((netntlm->chall_buf[2] == 0) && (netntlm->chall_buf[3] == 0) && (netntlm->chall_buf[4] == 0) && (netntlm->chall_buf[5] == 0))
      {
 -      uint w[16];
 +      uint w[16] = { 0 };
  
        w[ 0] = netntlm->chall_buf[6];
        w[ 1] = netntlm->chall_buf[7];
        w[ 2] = netntlm->chall_buf[0];
        w[ 3] = netntlm->chall_buf[1];
        w[ 4] = 0x80;
 -      w[ 5] = 0;
 -      w[ 6] = 0;
 -      w[ 7] = 0;
 -      w[ 8] = 0;
 -      w[ 9] = 0;
 -      w[10] = 0;
 -      w[11] = 0;
 -      w[12] = 0;
 -      w[13] = 0;
        w[14] = 16 * 8;
 -      w[15] = 0;
  
 -      uint dgst[4];
 +      uint dgst[4] = { 0 };
  
        dgst[0] = MAGIC_A;
        dgst[1] = MAGIC_B;
  
      transform_netntlmv1_key ((u8 *) key_md4, (u8 *) key_des);
  
 -    uint Kc[16];
 -    uint Kd[16];
 +    uint Kc[16] = { 0 };
 +    uint Kd[16] = { 0 };
  
      _des_keysetup (key_des, Kc, Kd, c_skb);
  
@@@ -11368,7 -11428,9 +11368,7 @@@ int ipb2_parse_hash (char *input_buf, u
  
    char *salt_buf = input_buf + 32 + 1;
  
 -  uint salt_pc_block[16];
 -
 -  memset (salt_pc_block, 0, sizeof (salt_pc_block));
 +  uint salt_pc_block[16] = { 0 };
  
    char *salt_pc_block_ptr = (char *) salt_pc_block;
  
  
    salt_pc_block[14] = salt_len * 8;
  
 -  uint salt_pc_digest[4];
 -
 -  salt_pc_digest[0] = MAGIC_A;
 -  salt_pc_digest[1] = MAGIC_B;
 -  salt_pc_digest[2] = MAGIC_C;
 -  salt_pc_digest[3] = MAGIC_D;
 +  uint salt_pc_digest[4] = { MAGIC_A, MAGIC_B, MAGIC_C, MAGIC_D };
  
    md5_64 (salt_pc_block, salt_pc_digest);
  
@@@ -11493,7 -11560,9 +11493,7 @@@ int sha1b64_parse_hash (char *input_buf
  
    u32 *digest = (u32 *) hash_buf->digest;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (base64_to_int, (const u8 *) input_buf + 5, input_len - 5, tmp_buf);
  
@@@ -11524,7 -11593,9 +11524,7 @@@ int sha1b64s_parse_hash (char *input_bu
  
    salt_t *salt = hash_buf->salt;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    int tmp_len = base64_decode (base64_to_int, (const u8 *) input_buf + 6, input_len - 6, tmp_buf);
  
@@@ -12072,7 -12143,7 +12072,7 @@@ int ikepsk_md5_parse_hash (char *input_
  
    char *in_off[9];
  
 -  size_t in_len[9];
 +  size_t in_len[9] = { 0 };
  
    in_off[0] = strtok (input_buf, ":");
  
      in_len[i] = strlen (in_off[i]);
    }
  
 -  char *ptr;
 -
 -  ptr = (char *) ikepsk->msg_buf;
 +  char *ptr = (char *) ikepsk->msg_buf;
  
    for (i = 0; i < in_len[0]; i += 2) *ptr++ = hex_to_u8 ((const u8 *) in_off[0] + i);
    for (i = 0; i < in_len[1]; i += 2) *ptr++ = hex_to_u8 ((const u8 *) in_off[1] + i);
@@@ -12157,7 -12230,7 +12157,7 @@@ int ikepsk_sha1_parse_hash (char *input
  
    char *in_off[9];
  
 -  size_t in_len[9];
 +  size_t in_len[9] = { 0 };
  
    in_off[0] = strtok (input_buf, ":");
  
      in_len[i] = strlen (in_off[i]);
    }
  
 -  char *ptr;
 -
 -  ptr = (char *) ikepsk->msg_buf;
 +  char *ptr = (char *) ikepsk->msg_buf;
  
    for (i = 0; i < in_len[0]; i += 2) *ptr++ = hex_to_u8 ((const u8 *) in_off[0] + i);
    for (i = 0; i < in_len[1]; i += 2) *ptr++ = hex_to_u8 ((const u8 *) in_off[1] + i);
@@@ -12326,7 -12401,7 +12326,7 @@@ int truecrypt_parse_hash_1k (char *inpu
      exit (-1);
    }
  
 -  char buf[512];
 +  char buf[512] = { 0 };
  
    int n = fread (buf, 1, sizeof (buf), fp);
  
@@@ -12373,7 -12448,7 +12373,7 @@@ int truecrypt_parse_hash_2k (char *inpu
      exit (-1);
    }
  
 -  char buf[512];
 +  char buf[512] = { 0 };
  
    int n = fread (buf, 1, sizeof (buf), fp);
  
@@@ -12930,7 -13005,9 +12930,7 @@@ int episerver4_parse_hash (char *input_
  
    salt->salt_len = salt_len;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (base64_to_int, (const u8 *) hash_pos, 43, tmp_buf);
  
@@@ -13031,7 -13108,9 +13031,7 @@@ int sha512b64s_parse_hash (char *input_
  
    salt_t *salt = hash_buf->salt;
  
 -  u8 tmp_buf[120];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[120] = { 0 };
  
    int tmp_len = base64_decode (base64_to_int, (const u8 *) input_buf + 9, input_len - 9, tmp_buf);
  
@@@ -13907,7 -13986,9 +13907,7 @@@ int nsec3_parse_hash (char *input_buf, 
    // and one that includes only the real salt (stored into salt_buf[]).
    // the domain-name length is put into array position 7 of salt_buf_pc[] since there is not salt_pc_len
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base32_decode (itoa32_to_int, (const u8 *) hashbuf_pos, 32, tmp_buf);
  
@@@ -14107,7 -14188,9 +14107,7 @@@ int lotus6_parse_hash (char *input_buf
  
    salt_t *salt = hash_buf->salt;
  
 -  u8 tmp_buf[120];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[120] = { 0 };
  
    base64_decode (lotus64_to_int, (const u8 *) input_buf + 2, input_len - 3, tmp_buf);
  
@@@ -14136,7 -14219,9 +14136,7 @@@ int lotus8_parse_hash (char *input_buf
  
    salt_t *salt = hash_buf->salt;
  
 -  u8 tmp_buf[120];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[120] = { 0 };
  
    base64_decode (lotus64_to_int, (const u8 *) input_buf + 2, input_len - 3, tmp_buf);
  
  
    // iteration
  
 -  char tmp_iter_buf[11];
 +  char tmp_iter_buf[11] = { 0 };
  
    memcpy (tmp_iter_buf, tmp_buf + 16, 10);
  
@@@ -14323,7 -14408,9 +14323,7 @@@ int peoplesoft_parse_hash (char *input_
  
    u32 *digest = (u32 *) hash_buf->digest;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (base64_to_int, (const u8 *) input_buf, input_len, tmp_buf);
  
@@@ -14544,7 -14631,9 +14544,7 @@@ int scrypt_parse_hash (char *input_buf
  
    // base64 decode
  
 -  u8 tmp_buf[33];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[33] = { 0 };
  
    int tmp_len = base64_decode (base64_to_int, (const u8 *) saltbuf_pos, hash_pos - saltbuf_pos, tmp_buf);
  
@@@ -14582,7 -14671,7 +14582,7 @@@ int juniper_parse_hash (char *input_buf
     * parse line
     */
  
 -  char decrypted[76]; // iv + hash
 +  char decrypted[76] = { 0 }; // iv + hash
  
    juniper_decrypt_hash (input_buf, decrypted);
  
@@@ -14656,7 -14745,9 +14656,7 @@@ int cisco8_parse_hash (char *input_buf
  
    // base64 decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    uint hash_len = input_len - 3 - salt_len - 1;
  
@@@ -14714,7 -14805,9 +14714,7 @@@ int cisco9_parse_hash (char *input_buf
  
    // base64 decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    uint hash_len = input_len - 3 - salt_len - 1;
  
@@@ -15837,7 -15930,9 +15837,7 @@@ int djangopbkdf2_parse_hash (char *inpu
  
    // base64 decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    uint hash_len = input_len - (hash_pos - input_buf);
  
@@@ -15929,7 -16024,9 +15929,7 @@@ int crammd5_parse_hash (char *input_buf
  
    // base64 decode salt
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, tmp_buf);
  
@@@ -16007,7 -16104,9 +16007,7 @@@ int saph_sha1_parse_hash (char *input_b
  
    u32 base64_len = input_len - (base64_pos - input_buf);
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    u32 decoded_len = base64_decode (base64_to_int, (const u8 *) base64_pos, base64_len, tmp_buf);
  
@@@ -16744,14 -16843,14 +16744,14 @@@ int pdf14_parse_hash (char *input_buf, 
  
    // md5
  
 -  uint salt_pc_block[32];
 +  uint salt_pc_block[32] = { 0 };
  
    char *salt_pc_ptr = (char *) salt_pc_block;
  
    memcpy (salt_pc_ptr, padding, 32);
    memcpy (salt_pc_ptr + 32, pdf->id_buf, pdf->id_len);
  
 -  uint salt_pc_digest[4];
 +  uint salt_pc_digest[4] = { 0 };
  
    md5_complete_no_limit (salt_pc_digest, salt_pc_block, 32 + pdf->id_len);
  
@@@ -17041,7 -17140,9 +17041,7 @@@ int pbkdf2_sha256_parse_hash (char *inp
  
    // decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    int hash_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_b64_len, tmp_buf);
  
@@@ -18203,7 -18304,9 +18203,7 @@@ int pbkdf2_md5_parse_hash (char *input_
  
    // decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    int hash_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_b64_len, tmp_buf);
  
@@@ -18285,7 -18388,9 +18285,7 @@@ int pbkdf2_sha1_parse_hash (char *input
  
    // decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    int hash_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_b64_len, tmp_buf);
  
@@@ -18372,7 -18477,9 +18372,7 @@@ int pbkdf2_sha512_parse_hash (char *inp
  
    // decode hash
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    int hash_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_b64_len, tmp_buf);
  
@@@ -18490,7 -18597,9 +18490,7 @@@ int bsdicrypt_parse_hash (char *input_b
  
    salt->salt_len = 4;
  
 -  u8 tmp_buf[100];
 -
 -  memset (tmp_buf, 0, sizeof (tmp_buf));
 +  u8 tmp_buf[100] = { 0 };
  
    base64_decode (itoa64_to_int, (const u8 *) input_buf + 9, 11, tmp_buf);
  
@@@ -18724,7 -18833,7 +18724,7 @@@ int cf10_parse_hash (char *input_buf, u
     * we can precompute the first sha256 transform
     */
  
 -  uint w[16];
 +  uint w[16] = { 0 };
  
    w[ 0] = byte_swap_32 (salt->salt_buf[ 0]);
    w[ 1] = byte_swap_32 (salt->salt_buf[ 1]);
    w[14] = byte_swap_32 (salt->salt_buf[14]);
    w[15] = byte_swap_32 (salt->salt_buf[15]);
  
 -  uint pc256[8];
 -
 -  pc256[0] = SHA256M_A;
 -  pc256[1] = SHA256M_B;
 -  pc256[2] = SHA256M_C;
 -  pc256[3] = SHA256M_D;
 -  pc256[4] = SHA256M_E;
 -  pc256[5] = SHA256M_F;
 -  pc256[6] = SHA256M_G;
 -  pc256[7] = SHA256M_H;
 +  uint pc256[8] = { SHA256M_A, SHA256M_B, SHA256M_C, SHA256M_D, SHA256M_E, SHA256M_F, SHA256M_G, SHA256M_H };
  
    sha256_64 (w, pc256);
  
@@@ -19996,7 -20114,7 +19996,7 @@@ int mangle_dupeblock_prepend (char arr[
  
    if ((arr_len + ulen) >= BLOCK_SIZE) return (arr_len);
  
 -  char cs[100];
 +  char cs[100] = { 0 };
  
    memcpy (cs, arr, ulen);
  
@@@ -20254,13 -20372,13 +20254,13 @@@ int generate_random_rule (char rule_buf
  
  int _old_apply_rule (char *rule, int rule_len, char in[BLOCK_SIZE], int in_len, char out[BLOCK_SIZE])
  {
-   char mem[BLOCK_SIZE];
+   char mem[BLOCK_SIZE] = { 0 };
  
    if (in == NULL) return (RULE_RC_REJECT_ERROR);
  
    if (out == NULL) return (RULE_RC_REJECT_ERROR);
  
-   if (in_len < 1) return (RULE_RC_REJECT_ERROR);
+   if (in_len < 1 || in_len > BLOCK_SIZE) return (RULE_RC_REJECT_ERROR);
  
    if (rule_len < 1) return (RULE_RC_REJECT_ERROR);
  
  
    for (rule_pos = 0; rule_pos < rule_len; rule_pos++)
    {
 -    int upos; int upos2;
 +    int upos, upos2;
      int ulen;
  
      switch (rule[rule_pos])