]> granicus.if.org Git - php/commitdiff
Merge remote branch 'upstream/master' into hash_password
authorAnthony Ferrara <ircmaxell@gmail.com>
Fri, 29 Jun 2012 14:29:58 +0000 (10:29 -0400)
committerAnthony Ferrara <ircmaxell@gmail.com>
Fri, 29 Jun 2012 14:29:58 +0000 (10:29 -0400)
Conflicts:
ext/standard/crypt.c

1  2 
ext/standard/crypt.c

index a592a4b37c0a0e1baf0d1bc617f389a1a43a3db7,27a8d82d0e43536fd0cccc9aba048d329168e30a..25f5ec0107a229f9075d8253ffeb6b32c2011f1a
@@@ -171,36 -199,46 +171,36 @@@ PHPAPI int crypt_execute(const char *pa
                        char *output;
                        int needed = (sizeof(sha512_salt_prefix) - 1
                                                + sizeof(sha512_rounds_prefix) + 9 + 1
-                                               + PHP_MAX_SALT_LEN + 43 + 1);
+                                               + salt_in_len + 1 + 86 + 1);
                        output = emalloc(needed);
 -                      salt[salt_in_len] = '\0';
  
 -                      crypt_res = php_sha512_crypt_r(str, salt, output, needed);
 +                      crypt_res = php_sha512_crypt_r(password, salt, output, needed);
                        if (!crypt_res) {
 -                              if (salt[0]=='*' && salt[1]=='0') {
 -                                      RETVAL_STRING("*1", 1);
 -                              } else {
 -                                      RETVAL_STRING("*0", 1);
 -                              }
 +                              memset(output, 0, needed);
 +                              efree(output);
 +                              return FAILURE;
                        } else {
 -                              RETVAL_STRING(output, 1);
 +                              *result = output;
 +                              return SUCCESS;
                        }
 -
 -                      memset(output, 0, needed);
 -                      efree(output);
                } else if (salt[0]=='$' && salt[1]=='5' && salt[2]=='$') {
                        const char sha256_salt_prefix[] = "$5$";
                        const char sha256_rounds_prefix[] = "rounds=";
                        char *output;
                        int needed = (sizeof(sha256_salt_prefix) - 1
                                                + sizeof(sha256_rounds_prefix) + 9 + 1
-                                               + PHP_MAX_SALT_LEN + 43 + 1);
+                                               + salt_in_len + 1 + 43 + 1);
                        output = emalloc(needed);
 -                      salt[salt_in_len] = '\0';
  
 -                      crypt_res = php_sha256_crypt_r(str, salt, output, needed);
 +                      crypt_res = php_sha256_crypt_r(password, salt, output, needed);
                        if (!crypt_res) {
 -                              if (salt[0]=='*' && salt[1]=='0') {
 -                                      RETVAL_STRING("*1", 1);
 -                              } else {
 -                                      RETVAL_STRING("*0", 1);
 -                              }
 +                              memset(output, 0, needed);
 +                              efree(output);
 +                              return FAILURE;
                        } else {
 -                              RETVAL_STRING(output, 1);
 +                              *result = output;
 +                              return SUCCESS;
                        }
 -
 -                      memset(output, 0, needed);
 -                      efree(output);
                } else if (
                                salt[0] == '$' &&
                                salt[1] == '2' &&