[Bug 8125] Marratech 6.1 crashes on start

Wine Bugs wine-bugs at winehq.org
Mon Apr 23 14:55:04 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=8125





------- Additional Comments From focht at gmx.net  2007-23-04 14:55 -------
Hello,

as usual i picked out the interesting ones :)

The attached error log produced by the applications own crash dumper is misleading.

I extended the callstack with my own findings from debugging native java (JNI):

--- snip ---
C  [msvcrt.dll+0x216b7] cxx_exception_handler
C  [java.dll+0x9723] wcanonicalize(WCHAR *orig_path, WCHAR *result, int size)
C  [java.dll+0x8794] Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env,
jobject this, jstring pathname)
j  java.io.WinNTFileSystem.canonicalize0(Ljava/lang/String;)Ljava/lang/String;+0
j  java.io.Win32FileSystem.canonicalize(Ljava/lang/String;)Ljava/lang/String;+298
j  java.io.File.getCanonicalPath()Ljava/lang/String;+10
j  java.lang.ClassLoader.loadLibrary0(Ljava/lang/Class;Ljava/io/File;)Z+25
j  java.lang.ClassLoader.loadLibrary(Ljava/lang/Class;Ljava/lang/String;Z)V+217
j  java.lang.Runtime.loadLibrary0(Ljava/lang/Class;Ljava/lang/String;)V+54
j  java.lang.System.loadLibrary(Ljava/lang/String;)V+7
j  java.lang.System.initializeSystemClass()V+110
--- snip ---

Although the callstack is completely valid, it never crashes there (just returns
fine).
Wasted some time to realize this.

The console java callstack is the right one.
Analyzing/debug obfuscated java code is not much fun, so here it goes...

Basically the following code produces the exception (might not match real code
100% - just to illustrate the problem):

--- snip app code ---
private File some_func()
{
  String strProps = System.getProperty("app_default_settings");
  if(strProps == null)
  {
      // no defaults yet!
      if(OS.isWindows() && !OS.isWindows9x() && some_helper.is_java_version_1_5())
      {   
        StringBuffer sb = new StringBuffer(System.getenv("ALLUSERSPROFILE"));
        sb.append(File.separatorChar).append("Application Data");
        sb.append(File.separatorChar).append("company_name_here");
        strProps = sb.toString();
      }
      else if(OS.isMacintosh())
          strProps = "/Users/Shared/company_name_here";
      else if(OS.isUnix())
          strProps = "/usr/local/share/company_name_here";
      else
          strProps = System.getProperty("user.home");

      sb = (new
StringBuilder()).append(sb).append(File.separator).append("app_default_settings").toString();
   }
   return new File(sb);
}

--- snip app code ---

This is the problematic code:

StringBuffer sb = new StringBuffer(System.getenv("ALLUSERSPROFILE"));

System.getenv("ALLUSERSPROFILE") (which boils down to getenv()) doesnt return
anything useful in wine (at least on my system).
Therefore StringBuffer() ctor throws. Guess. No Exception handler. Bad guys :)

To verify my analysis:

1.) set wine to Win9X (see the code snippet, the getenv() code is never reached
in this case) using winecfg.
 Result: no crash (app starts up, displaying all sorts of windows)

2.) set environment variable in shell (e.g. $ export ALLUSERSPROFILE="c:\blah")
 Result: no crash (app starts up, displaying all sorts of windows)

Resolution:

Either use Win9X config or have wine "%ALLUSERSPROFILE%" defined.

Regards


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list