scm checkins which happen to produce plus sign after base64_encode get decoded as garbage as plus sign in url means space. and then the data can't be decoded back to original string. $ php -r 'echo base64_encode("pood >qwertyuiopadsfzkq1"), "\n";' cG9vZCA+cXdlcnR5dWlvcGFkc2Z6a3Ex $ php -r 'echo base64_decode("cG9vZCA+cXdlcnR5dWlvcGFkc2Z6a3Ex"), "\n";' pood >qwertyuiopadsfzkq1 $ php -r 'echo base64_decode("cG9vZCA cXdlcnR5dWlvcGFkc2Z6a3Ex"), "\n";' pood ]Ù\]Z[ÜYÙÜL --- eventum-20060318/misc/scm/process_cvs_commits.php~ 2006-03-24 17:57:19.000000000 +0200 +++ eventum-20060318/misc/scm/process_cvs_commits.php 2006-03-24 17:57:01.000000000 +0200 @@ -71,18 +72,18 @@ if (count($matches) > 1) { // need to encode all of the url arguments - $issue_id = base64_encode($matches[1]); - $commit_msg = base64_encode($commit_msg); - $cvs_module = base64_encode($cvs_module); - $username = base64_encode($username); + $issue_id = rawurlencode($matches[1]); + $commit_msg = rawurlencode($commit_msg); + $cvs_module = rawurlencode($cvs_module); + $username = rawurlencode($username); // build the GET url to use $ping_url = $eventum_relative_url . "scm_ping.php?module=$cvs_module&username=$username&commit_msg=$commit_msg"; $ping_url .= "&issue[]=$issue_id"; for ($i = 0; $i < count($modified_files); $i++) { - $ping_url .= "&files[$i]=" . base64_encode($modified_files[$i]['filename']); - $ping_url .= "&old_versions[$i]=" . base64_encode($modified_files[$i]['old_revision']); - $ping_url .= "&new_versions[$i]=" . base64_encode($modified_files[$i]['new_revision']); + $ping_url .= "&files[$i]=" . rawurlencode($modified_files[$i]['filename']); + $ping_url .= "&old_versions[$i]=" . rawurlencode($modified_files[$i]['old_revision']); + $ping_url .= "&new_versions[$i]=" . rawurlencode($modified_files[$i]['new_revision']); } $fp = fsockopen($eventum_domain, $eventum_port, $errno, $errstr, 30); --- eventum-20060318/scm_ping.php~ 2006-03-24 17:57:20.000000000 +0200 +++ eventum-20060318/scm_ping.php 2006-03-24 17:57:01.000000000 +0200 @@ -33,8 +33,6 @@ include_once(APP_INC_PATH . "class.workflow.php"); include_once(APP_INC_PATH . "db_access.php"); -$HTTP_GET_VARS = Misc::array_map_deep($HTTP_GET_VARS, 'base64_decode'); - foreach ($HTTP_GET_VARS['issue'] as $issue_id) { $files = array(); for ($y = 0; $y < count($HTTP_GET_VARS['files']); $y++) {