pajoye                                   Fri, 11 Dec 2009 15:57:01 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=291993

Log:
- #50334, use our own implementations of stpncpy and mempcy, avoiding weird 
behaviors on certain platforms like solaris

Bug: http://bugs.php.net/50334 (Closed) crypt ignores sha512 prefix
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/standard/crypt_sha256.c
    U   php/php-src/branches/PHP_5_3/ext/standard/crypt_sha512.c
    U   php/php-src/trunk/ext/standard/crypt_sha256.c
    U   php/php-src/trunk/ext/standard/crypt_sha512.c

Modified: php/php-src/branches/PHP_5_3/ext/standard/crypt_sha256.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/crypt_sha256.c    2009-12-11 
15:42:16 UTC (rev 291992)
+++ php/php-src/branches/PHP_5_3/ext/standard/crypt_sha256.c    2009-12-11 
15:57:01 UTC (rev 291993)
@@ -40,8 +40,7 @@
 # endif
 #endif

-#ifndef HAVE_STRPNCPY
-char * stpncpy(char *dst, const char *src, size_t len)
+char * __php_stpncpy(char *dst, const char *src, size_t len)
 {
        size_t n = strlen(src);
        if (n > len) {
@@ -49,14 +48,11 @@
        }
        return strncpy(dst, src, len) + n;
 }
-#endif

-#ifndef HAVE_MEMPCPY
-void * mempcpy(void * dst, const void * src, size_t len)
+void * __php_mempcpy(void * dst, const void * src, size_t len)
 {
        return (((char *)memcpy(dst, src, len)) + len);
 }
-#endif

 #ifndef MIN
 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
@@ -457,7 +453,7 @@
        /* Create byte sequence P.  */
        cp = p_bytes = alloca(key_len);
        for (cnt = key_len; cnt >= 32; cnt -= 32) {
-               cp = mempcpy((void *)cp, (const void *)temp_result, 32);
+               cp = __php_mempcpy((void *)cp, (const void *)temp_result, 32);
        }
        memcpy(cp, temp_result, cnt);

@@ -475,7 +471,7 @@
        /* Create byte sequence S.  */
        cp = s_bytes = alloca(salt_len);
        for (cnt = salt_len; cnt >= 32; cnt -= 32) {
-               cp = mempcpy(cp, temp_result, 32);
+               cp = __php_mempcpy(cp, temp_result, 32);
        }
        memcpy(cp, temp_result, cnt);

@@ -515,7 +511,7 @@

        /* Now we can construct the result string.  It consists of three
        parts.  */
-       cp = stpncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
+       cp = __php_stpncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
        buflen -= sizeof(sha256_salt_prefix) - 1;

        if (rounds_custom) {
@@ -528,7 +524,7 @@
                buflen -= n;
        }

-       cp = stpncpy(cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
+       cp = __php_stpncpy(cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
        buflen -= MIN((size_t) MAX (0, buflen), salt_len);

        if (buflen > 0) {

Modified: php/php-src/branches/PHP_5_3/ext/standard/crypt_sha512.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/crypt_sha512.c    2009-12-11 
15:42:16 UTC (rev 291992)
+++ php/php-src/branches/PHP_5_3/ext/standard/crypt_sha512.c    2009-12-11 
15:57:01 UTC (rev 291993)
@@ -32,21 +32,15 @@
 # include <sys/param.h>
 # include <sys/types.h>
 # if HAVE_STRING_H
-#  define __USE_GNU
 #  include <string.h>
 # else
 #  include <strings.h>
 # endif
 #endif

-#ifndef HAVE_MEMPCPY
-extern void * mempcpy(void * dst, const void * src, size_t len);
-#endif
+extern void * __php_mempcpy(void * dst, const void * src, size_t len);
+extern char * __php_stpncpy(char *dst, const char *src, size_t len);

-#ifndef HAVE_STRPNCPY
-extern char * stpncpy(char *dst, const char *src, size_t len);
-#endif
-
 #ifndef MIN
 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
 #endif
@@ -488,7 +482,7 @@
        /* Create byte sequence P.  */
        cp = p_bytes = alloca(key_len);
        for (cnt = key_len; cnt >= 64; cnt -= 64) {
-               cp = mempcpy((void *) cp, (const void *)temp_result, 64);
+               cp = __php_mempcpy((void *) cp, (const void *)temp_result, 64);
        }

        memcpy(cp, temp_result, cnt);
@@ -507,7 +501,7 @@
        /* Create byte sequence S.  */
        cp = s_bytes = alloca(salt_len);
        for (cnt = salt_len; cnt >= 64; cnt -= 64) {
-               cp = mempcpy(cp, temp_result, 64);
+               cp = __php_mempcpy(cp, temp_result, 64);
        }
        memcpy(cp, temp_result, cnt);

@@ -547,7 +541,7 @@

        /* Now we can construct the result string.  It consists of three
         parts.  */
-       cp = stpncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
+       cp = __php_stpncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
        buflen -= sizeof(sha512_salt_prefix) - 1;

        if (rounds_custom) {
@@ -560,7 +554,7 @@
          buflen -= n;
        }

-       cp = stpncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
+       cp = __php_stpncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
        buflen -= (int) MIN((size_t) MAX(0, buflen), salt_len);

        if (buflen > 0) {

Modified: php/php-src/trunk/ext/standard/crypt_sha256.c
===================================================================
--- php/php-src/trunk/ext/standard/crypt_sha256.c       2009-12-11 15:42:16 UTC 
(rev 291992)
+++ php/php-src/trunk/ext/standard/crypt_sha256.c       2009-12-11 15:57:01 UTC 
(rev 291993)
@@ -40,8 +40,7 @@
 # endif
 #endif

-#ifndef HAVE_STRPNCPY
-char * stpncpy(char *dst, const char *src, size_t len)
+char * __php_stpncpy(char *dst, const char *src, size_t len)
 {
        size_t n = strlen(src);
        if (n > len) {
@@ -49,14 +48,11 @@
        }
        return strncpy(dst, src, len) + n;
 }
-#endif

-#ifndef HAVE_MEMPCPY
-void * mempcpy(void * dst, const void * src, size_t len)
+void * __php_mempcpy(void * dst, const void * src, size_t len)
 {
        return (((char *)memcpy(dst, src, len)) + len);
 }
-#endif

 #ifndef MIN
 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
@@ -457,7 +453,7 @@
        /* Create byte sequence P.  */
        cp = p_bytes = alloca(key_len);
        for (cnt = key_len; cnt >= 32; cnt -= 32) {
-               cp = mempcpy((void *)cp, (const void *)temp_result, 32);
+               cp = __php_mempcpy((void *)cp, (const void *)temp_result, 32);
        }
        memcpy(cp, temp_result, cnt);

@@ -475,7 +471,7 @@
        /* Create byte sequence S.  */
        cp = s_bytes = alloca(salt_len);
        for (cnt = salt_len; cnt >= 32; cnt -= 32) {
-               cp = mempcpy(cp, temp_result, 32);
+               cp = __php_mempcpy(cp, temp_result, 32);
        }
        memcpy(cp, temp_result, cnt);

@@ -515,7 +511,7 @@

        /* Now we can construct the result string.  It consists of three
        parts.  */
-       cp = stpncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
+       cp = __php_stpncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
        buflen -= sizeof(sha256_salt_prefix) - 1;

        if (rounds_custom) {
@@ -528,7 +524,7 @@
                buflen -= n;
        }

-       cp = stpncpy(cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
+       cp = __php_stpncpy(cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
        buflen -= MIN((size_t) MAX (0, buflen), salt_len);

        if (buflen > 0) {

Modified: php/php-src/trunk/ext/standard/crypt_sha512.c
===================================================================
--- php/php-src/trunk/ext/standard/crypt_sha512.c       2009-12-11 15:42:16 UTC 
(rev 291992)
+++ php/php-src/trunk/ext/standard/crypt_sha512.c       2009-12-11 15:57:01 UTC 
(rev 291993)
@@ -32,21 +32,15 @@
 # include <sys/param.h>
 # include <sys/types.h>
 # if HAVE_STRING_H
-#  define __USE_GNU
 #  include <string.h>
 # else
 #  include <strings.h>
 # endif
 #endif

-#ifndef HAVE_MEMPCPY
-extern void * mempcpy(void * dst, const void * src, size_t len);
-#endif
+extern void * __php_mempcpy(void * dst, const void * src, size_t len);
+extern char * __php_stpncpy(char *dst, const char *src, size_t len);

-#ifndef HAVE_STRPNCPY
-extern char * stpncpy(char *dst, const char *src, size_t len);
-#endif
-
 #ifndef MIN
 # define MIN(a, b) (((a) < (b)) ? (a) : (b))
 #endif
@@ -488,7 +482,7 @@
        /* Create byte sequence P.  */
        cp = p_bytes = alloca(key_len);
        for (cnt = key_len; cnt >= 64; cnt -= 64) {
-               cp = mempcpy((void *) cp, (const void *)temp_result, 64);
+               cp = __php_mempcpy((void *) cp, (const void *)temp_result, 64);
        }

        memcpy(cp, temp_result, cnt);
@@ -507,7 +501,7 @@
        /* Create byte sequence S.  */
        cp = s_bytes = alloca(salt_len);
        for (cnt = salt_len; cnt >= 64; cnt -= 64) {
-               cp = mempcpy(cp, temp_result, 64);
+               cp = __php_mempcpy(cp, temp_result, 64);
        }
        memcpy(cp, temp_result, cnt);

@@ -547,7 +541,7 @@

        /* Now we can construct the result string.  It consists of three
         parts.  */
-       cp = stpncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
+       cp = __php_stpncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
        buflen -= sizeof(sha512_salt_prefix) - 1;

        if (rounds_custom) {
@@ -560,7 +554,7 @@
          buflen -= n;
        }

-       cp = stpncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
+       cp = __php_stpncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
        buflen -= (int) MIN((size_t) MAX(0, buflen), salt_len);

        if (buflen > 0) {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to