Make WordPress Core

Opened 8 years ago

Closed 6 years ago

#5872 closed defect (bug) (fixed)

gettext fails to determine big-endian byteorder on 64bit systems

Reported by: tkoenig Owned by:
Milestone: 2.8 Priority: normal
Severity: normal Version: 2.3.3
Component: I18N Keywords: close gettext byteorder 64bit bigendian
Focuses: Cc:


Replying to comment by nyuwec for #3780

So this code in the gettext.php (starting at line 105) works for me on both 32 and 64 bit systems:

for I am generating the .mo-files on my PPC iBook, I end up with big-endian .mo-files. They are still not recognized correctly on my 64bit hosting platform. Thererfore the provided sourcecode is only half way there.

I suggest adding another 64bit magic number. The following code should behave exactly as before except additionally working for big-endian .mo-files on 64bit architectures. I tested it and it worked well.

		// Caching can be turned off
		$this->enable_cache = $enable_cache;

		// $MAGIC1 = (int)0x950412de; //bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565
		$MAGIC1 = (int) - 1794895138; // which is 0x959412de as s_int32 value
		// $MAGIC2 = (int)0xde120495; //bug
		$MAGIC2 = (int) - 569244523;  // which is 0xde120495 as s_int32 value
		// 64-bit fix
		$MAGIC3 = (int) 2500072158; // which is 0x959412de as u_int32 value
		// 64-bit fix
		$MAGIC4 = (int) 3725722773; // which is 0xde120495 as u_int32 value

		$this->STREAM = $Reader;
		$magic = $this->readint();
		if ($magic == $MAGIC1 || $magic == $MAGIC3) { // to make sure it works for 64-bit platforms
			$this->BYTEORDER = 0;
		} elseif ($magic == $MAGIC2 || $magic == $MAGIC4) {
			$this->BYTEORDER = 1;
		} else {
			$this->error = 1; // not MO file
			return false;

Change History (3)

comment:1 @lloydbudd8 years ago

  • Milestone changed from 2.3.4 to 2.5

comment:2 @Denis-de-Bernardy6 years ago

  • Keywords close added

fixed now, no?

comment:3 @ryan6 years ago

  • Milestone changed from 2.9 to 2.8
  • Resolution set to fixed
  • Status changed from new to closed

Yes, pomo has all of the latest 64 bit fixes.

Note: See TracTickets for help on using tickets.