Hi, > I'll merge the patch to master (7.2) if there is no comment. > > > Patch: > > $ git diff > diff --git a/ext/standard/uniqid.c b/ext/standard/uniqid.c > index f429e6d..80dacdb 100644 > --- a/ext/standard/uniqid.c > +++ b/ext/standard/uniqid.c > @@ -35,7 +35,7 @@ > #include <sys/time.h> > #endif > > -#include "php_lcg.h" > +#include "php_random.h" > #include "uniqid.h" > > /* {{{ proto string uniqid([string prefix [, bool more_entropy]]) > @@ -77,7 +77,9 @@ PHP_FUNCTION(uniqid) > * digits for usecs. > */ > if (more_entropy) { > - uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, > usec, php_combined_lcg() * 10); > + zend_long rand; > + php_random_int(1000000000, 9999999999, &rand, 1); > + uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, > usec, (double)rand/10000000000); > } else { > uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec); > } >
I think it would be php_random_int(0, 9999999999, &rand, 1); uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, (double)rand/1000000000); [Please note that "(double)rand/10000000000" is changed to "(double)rand/1000000000".] I don't oppose this patch, but I cannot understand your argument. > I thought we must fix due to proposed PHPMailer bug fix patch. (See below > for detail) Previous discussion went wrong because of compatibility > misunderstanding. There is _no_ additional BC issue. Please keep in mind > this. ... > Proposed patch for PHPMailer command injection issue: > > I found following code(patch) for PHPMailer security issue. > https://core.trac.wordpress.org/attachment/ticket/37210/0001 > -Upgrade-PHPMailer-from-5.2.14-to-5.2.19.patch > > 2086 * Create unique ID > 2087 * @return string > 2088 */ > 2089 protected function generateId() { > 2090 return md5(uniqid(time())); > 2024 2091 } > 2025 2092 > 2026 2093 /** > ……class PHPMailer > 2034 2101 { > 2035 2102 $body = ''; > 2036 2103 //Create unique IDs and preset boundaries > 2037 $this->uniqueid = md5(uniqid(time())); > 2104 $this->uniqueid = $this->generateId(); > 2038 2105 $this->boundary[1] = 'b1_' . $this->uniqueid; > 2039 2106 $this->boundary[2] = 'b2_' . $this->uniqueid; > 2040 2107 $this->boundary[3] = 'b3_' . $this->uniqueid; > > Although I never recommend such code, the ID is good enough for this > specific usage. I think we should remove the goccha, "uniqid() is not > unique". This code explains why. Obviously, this is not related to your patch. "we must fix due to proposed PHPMailer bug fix patch" is "FUD". Behavior of uniqid without $more_entropy=TRUE is not changed. What's your intention? BTW, I agree that uniqid() is good enough to use as MIME boundary key, if collision to body content is checked. But non-timestamp-based, simple random value generator is more useful for this purpose. > IMHO, we should enable more_entropy by default, with stronger entropy > prefered. This is BC-break, and I don't think such change is wanted. (IMHO, what is wanted is new simple random string generator that uses only specified characters.) -- Kazuo Oishi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php