Safflower's Blog Security Researcher

PHP의 base_convert() 함수 버그

PHP
 

PHP의 base_convert() 함수는 큰 수에 대해서는 내부적으로 double 혹은 float 자료형을 사용하기에 정확하지 않을 수 있다.

function str_baseconvert($str, $frombase=10, $tobase=36) {
	$str = trim($str);
	if (intval($frombase) != 10) {
		$len = strlen($str);
		$q = 0;
		for ($i=0; $i<$len; $i++) {
			$r = base_convert($str[$i], $frombase, 10);
			$q = bcadd(bcmul($q, $frombase), $r);
		}
	}
	else $q = $str;

	if (intval($tobase) != 10) {
		$s = '';
		while (bccomp($q, '0', 0) > 0) {
			$r = intval(bcmod($q, $tobase));
			$s = base_convert($r, 10, $tobase) . $s;
			$q = bcdiv($q, $tobase, 0);
		}
	}
	else $s = $q;

	return $s;
}

http://us1.php.net/manual/kr/function.base-convert.php


Similar Posts

Comments