New Ticket     Tickets     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #35244 (closed defect: fixed)

Opened 10 months ago

Last modified 10 months ago

hexfiend 2.1.2 fails to compile XIB: The value for Key (NSTag) is too large to fit into a 32 bit integer.

Reported by: 200309@… Owned by: cal@…
Priority: Normal Milestone:
Component: ports Version: 2.1.1
Keywords: snowleopard Cc: dweber@…
Port: hexfiend

Description

hexfiend 2.1.2 BUILD FAILED 10.6.8

Attachments

hexfiend-build-fail.txt (342.5 KB) - added by 200309@… 10 months ago.

Change History

Changed 10 months ago by 200309@…

comment:1 Changed 10 months ago by macsforever2000@…

  • Cc dweber@… added
  • Keywords snowleopard added; snow leopard 10.6.8 removed
  • Owner changed from macports-tickets@… to cal@…
  • Summary changed from hexfiend 2.1.2 ** BUILD FAILED ** 10.6.8 to hexfiend 2.1.2 build failed 10.6.8

comment:2 Changed 10 months ago by cal@…

  • Status changed from new to assigned
  • Summary changed from hexfiend 2.1.2 build failed 10.6.8 to hexfiend 2.1.2 fails to compile XIB: The value for Key (NSTag) is too large to fit into a 32 bit integer.

Do you have a 32-bit system? The log shows you're trying to build HexFiend in i386. Did you set build_arch in macports.conf?

The problem is:

CompileXIB English.lproj/MainMenu.xib
    cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_editors_hexfiend/HexFiend/work/HexFiend-2.1.2
    /Developer/usr/bin/ibtool --errors --warnings --notices --output-format human-readable-text --compile "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_editors_hexfiend/HexFiend/work/HexFiend-2.1.2/build/Release/Hex Fiend.app/Contents/Resources/English.lproj/MainMenu.nib" /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_editors_hexfiend/HexFiend/work/HexFiend-2.1.2/English.lproj/MainMenu.xib --sdk ""

2012-07-18 09:27:21.628 ibtool[1310:607] Exception raised while decoding document objects - IBXMLDecoder: The value (2483028224) for key (NSTag) is too large to fit into a 32 bit integer
/* com.apple.ibtool.errors */
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_editors_hexfiend/HexFiend/work/HexFiend-2.1.2/English.lproj/MainMenu.xib: error: The document "MainMenu.xib" could not be opened. The operation couldn’t be completed. IBXMLDecoder: The value (2483028224) for key (NSTag) is too large to fit into a 32 bit integer.
The document "MainMenu.xib" could not be opened. The operation couldn’t be completed. IBXMLDecoder: The value (2483028224) for key (NSTag) is too large to fit into a 32 bit integer.
    Failure Reason: IBXMLDecoder: The value (2483028224) for key (NSTag) is too large to fit into a 32 bit integer.
    Recovery Suggestion: Check the console log for additional information.

comment:3 follow-up: ↓ 4 Changed 10 months ago by cal@…

I fear there might be no easy fix.

The problem is caused by the tag values used for two menu entries in the menu bar switching the text encoding to UTF-16 (little and big endian). Since NSStringEncoding is an integer the tag value of these menu entries directly represents the encoding to be used (NSUTF16BigEndianStringEncoding = 0x90000100 = 2415919360 and NSUTF16LittleEndianStringEncoding = 0x94000100 = 2483028224). Both of these values fit into 32 bit, but both have the MSB set (which means they would be negative if interpreted in a signed fashion).

Could you try editing MainMenu.xib and replacing those numbers with their signed interpretations in decimal representation, i.e.

sudo port clean HexFiend
sudo port patch HexFiend
cd $(port work HexFiend)/HexFiend-2.1.2/English.lproj
sudo -u macports sed -E -e 's/2415919360/-1879047936/g' -e 's/2483028224/-1811939072/g' -i '' MainMenu.xib
sudo port build HexFiend

and see if it still breaks?

comment:4 in reply to: ↑ 3 Changed 10 months ago by 200309@…

Replying to cal@…:

Could you try editing MainMenu.xib and replacing those numbers with their signed interpretations in decimal representation, i.e.
...
and see if it still breaks?

ok... no error messages.
What is the next step to getting it to install?

112456 sudo port clean --all hexfiend
Password:
--->  Cleaning HexFiend
112514 sudo port install hexfiend
--->  Fetching archive for HexFiend
--->  Attempting to fetch HexFiend-2.1.2_1.darwin_10.i386.tbz2 from http://packages.macports.org/HexFiend
--->  Fetching distfiles for HexFiend
--->  Attempting to fetch HexFiend-2.1.2.tar.gz from http://distfiles.macports.org/HexFiend/2.1.2_1
--->  Verifying checksum(s) for HexFiend
--->  Extracting HexFiend
--->  Applying patches to HexFiend
--->  Configuring HexFiend
--->  Building HexFiend
Error: org.macports.build for port HexFiend returned: command execution failed
Please see the log file for port HexFiend for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_editors_hexfiend/HexFiend/main.log
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets
Error: Processing of port hexfiend failed

112703 sudo port clean HexFiend \
>   && sudo port patch HexFiend \
>   && cd $(port work HexFiend)/HexFiend-2.1.2/English.lproj \
>   && sudo -u macports sed -E -e 's/2415919360/-1879047936/g' -e 's/2483028224/-1811939072/g' -i '' MainMenu.xib \
>   && sudo port build HexFiend
Password:
--->  Cleaning HexFiend
--->  Fetching distfiles for HexFiend
--->  Verifying checksum(s) for HexFiend
--->  Extracting HexFiend
--->  Applying patches to HexFiend
--->  Configuring HexFiend
--->  Building HexFiend

113540

comment:5 follow-up: ↓ 6 Changed 10 months ago by cal@…

Just run port install HexFiend like you usually do; it should pick up where you left it and continue.

I can turn this into a patch, but I still have to test whether this will still work correctly on 64 bit systems, where using -1879047936 will turn into 0xFFFFFFFF90000100. If this gets casted to drop the leading 4 bytes, this can safely be applied on 64 bit, too, otherwise I'll have to find a way to apply the patch depending on the build architecture.

comment:6 in reply to: ↑ 5 Changed 10 months ago by 200309@…

Replying to cal@…:

Just run port install HexFiend like you usually do; it should pick up where you left it and continue.

I can turn this into a patch, but I still have to test whether this will still work correctly on 64 bit systems, where using -1879047936 will turn into 0xFFFFFFFF90000100. If this gets casted to drop the leading 4 bytes, this can safely be applied on 64 bit, too, otherwise I'll have to find a way to apply the patch depending on the build architecture.

HexFiend did install, and seems to work well.
So far the only thing that did not work is command+E (Use Selection for Find).

152400 sudo port install hexfiend
Password:
--->  Fetching archive for HexFiend
--->  Attempting to fetch HexFiend-2.1.2_1.darwin_10.i386.tbz2 from http://packages.macports.org/HexFiend
--->  Staging HexFiend into destroot
--->  Installing HexFiend @2.1.2_1
--->  Activating HexFiend @2.1.2_1
--->  Cleaning HexFiend
--->  Updating database of binaries: 100.0%
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.

152612 which hexfiend

155751 open -a hex\ fiend .vimrc

155808

comment:7 follow-up: ↓ 9 Changed 10 months ago by cal@…

Can you confirm "UTF-16 Little" and "UTF-16 Big" from the "Text Encoding" menu work as expected, since that's what we've been patching?

comment:8 follow-up: ↓ 10 Changed 10 months ago by cal@…

Cmd+E doesn't work for me on the 64 bit build either, btw. Does this work with the DMG offered by the HexFiend project? If not, you should take the bug report there.

comment:9 in reply to: ↑ 7 Changed 10 months ago by 200309@…

Replying to cal@…:

Can you confirm "UTF-16 Little" and "UTF-16 Big" from the "Text Encoding" menu work as expected, since that's what we've been patching?

Well. I can only tell you it looks like Chinese to me, and "UTF-16 Little" is different from "UTF-16 Big".

comment:10 in reply to: ↑ 8 Changed 10 months ago by 200309@…

Replying to cal@…:

Cmd+E doesn't work for me on the 64 bit build either, btw. Does this work with the DMG offered by the HexFiend project? If not, you should take the bug report there.

In the dmg version 2.0.0 Cmd+E also does NOT work.

And the zip version 2.1.2 crashes on:

Processor Name: Intel Core Duo
Processor Speed: 2 GHz

even though it seems to be compiled both 32 and 64 bit:

220256 file Hex\ Fiend 
Hex Fiend: Mach-O universal binary with 2 architectures
Hex Fiend (for architecture x86_64):	Mach-O 64-bit executable x86_64
Hex Fiend (for architecture i386):	Mach-O executable i386
220259 

This is the first part of the crash log:

Process:         Hex Fiend [403]
Path:            /Users/tech/Downloads/Hex Fiend.app/Contents/MacOS/Hex Fiend
Identifier:      com.ridiculousfish.HexFiend
Version:         2.1.2 (200)
Code Type:       X86 (Native)
Parent Process:  launchd [92]

Date/Time:       2012-07-19 21:45:54.734 -0700
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSKeyedUnarchiver decodeInt32ForKey:]: value (2483028224) for key (NSTag) too large to fit in 32-bit integer'

comment:11 Changed 10 months ago by cal@…

  • Status changed from assigned to closed
  • Resolution set to fixed

64 bit systems just drop the leading 4 bytes of the integer before using it as value for NSStringEncoding, which means we can safely apply this on both 32 and 64 bit systems.

I've done this in r95739. I will also report this upstream.

comment:12 Changed 10 months ago by cal@…

Note: See TracTickets for help on using tickets.