Opened 8 years ago

Closed 8 years ago

Last modified 8 years ago

#35244 closed defect (fixed)

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: neverpanic (Clemens Lang)
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 (1)

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

Download all attachments as: .zip

Change History (13)

Changed 8 years ago by 200309@…

Attachment: hexfiend-build-fail.txt added

comment:1 Changed 8 years ago by mf2k (Frank Schima)

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

comment:2 Changed 8 years ago by neverpanic (Clemens Lang)

Status: newassigned
Summary: hexfiend 2.1.2 build failed 10.6.8hexfiend 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 Changed 8 years ago by neverpanic (Clemens Lang)

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 8 years 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 Changed 8 years ago by neverpanic (Clemens Lang)

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 8 years 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 Changed 8 years ago by neverpanic (Clemens Lang)

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 Changed 8 years ago by neverpanic (Clemens Lang)

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 8 years 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 8 years 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 8 years ago by neverpanic (Clemens Lang)

Resolution: fixed
Status: assignedclosed

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 8 years ago by neverpanic (Clemens Lang)

Note: See TracTickets for help on using tickets.