Version: (using KDE KDE 3.5.8) Installed from: Gentoo Packages Compiler: gcc version 4.2.2 (Gentoo 4.2.2 p1.0) OS: Linux LiveConnect (calling methods in Java applets from JavaScript) calls wrong method when the argument is specified as "". It should call setChar(java.lang.String), but looks for setChar() (no arguments) (setChar() is a test method in applet). It badly breaks logging in to some banks that use applets for utility functions not available in JavaScript. I've created a test case - index.xml and testapplet.jar (source of applet included in jar file). When calling the function with non-empty argument (for example enter "test value" - without quotes) in 'Input box' and clicking 'pass to testapplet' produces following debugging information: kjas: KJavaProcess::send(): args = (0,0,1,0,setChar) kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "1" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "setChar" kjas: KJavaProcess::storeSize, size = 17 kjas: <KJavaProcess::send 16 kjas: >KJavaAppletServer::waitForReturnData kjas: slotWroteData 0 kjas: slotJavaRequest: 0 kjas: args=(2,0,) kjas: <KJavaAppletServer::waitForReturnData stacksize:1 kjas: call() func="setChar" kjas: call() fargs="(test value)" (1) kjas: callMember: args: (0,1,0,setChar,test value) kjas: KJavaProcess::send(): args = (1,0,1,0,setChar,test value) kjas: KJavaProcess::addArgs(): it = "1" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "1" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "setChar" kjas: KJavaProcess::addArgs(): it = "test value" kjas: KJavaProcess::storeSize, size = 28 kjas: <KJavaProcess::send 17 kjas: >KJavaAppletServer::waitForReturnData kjas: slotWroteData 0 kjas: slotJavaRequest: 1 kjas: args=(5,0,Set variable to "test value") kjas: <KJavaAppletServer::waitForReturnData stacksize:1 Notice the fargs="(test value)" (1) - it shows the argument value and number of arguments, in next line KJavaProcess::send() sees the argument correctly. Now remove everything from 'Input box' (leave it empty) and click the button, following information is produced: kjas: KJavaProcess::send(): args = (2,0,1,0,setChar) kjas: KJavaProcess::addArgs(): it = "2" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "1" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "setChar" kjas: KJavaProcess::storeSize, size = 17 kjas: <KJavaProcess::send 16 kjas: >KJavaAppletServer::waitForReturnData kjas: slotWroteData 0 kjas: slotJavaRequest: 2 kjas: args=(2,0,) kjas: <KJavaAppletServer::waitForReturnData stacksize:1 kjas: call() func="setChar" kjas: call() fargs="()" (1) kjas: callMember: args: (0,1,0,setChar,) kjas: KJavaProcess::send(): args = (3,0,1,0,setChar,) kjas: KJavaProcess::addArgs(): it = "3" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "1" kjas: KJavaProcess::addArgs(): it = "0" kjas: KJavaProcess::addArgs(): it = "setChar" kjas: KJavaProcess::addArgs(): it = "" kjas: KJavaProcess::storeSize, size = 18 kjas: <KJavaProcess::send 17 kjas: >KJavaAppletServer::waitForReturnData kjas: slotWroteData 0 kjas: slotJavaRequest: 3 kjas: args=(5,0,Set variable to "Called no-arg!") kjas: <KJavaAppletServer::waitForReturnData stacksize:1 The empty argument is correctly passed to KJavaProcess, but when it's being sent it gets lost - the setChar() is called. CallAction.apply() shows 0 arguments that were passed (added following line: Main.info("args.size() = " + args.size()); after `try {'). I'll attach the above mentioned files.
Created attachment 22307 [details] Test case: index.html
Created attachment 22308 [details] Test case: testapplet.jar Compiled applet with source.
Thanks for testcasing and diagnosing this problem... CC'ing the person most familiar with this.
SVN commit 744487 by vriezen: KJASProtocolHandler.getArg can't handle empty strings, so for calling a member function from js we must add the number of arguments as extra param. There's no way to see difference between NULL and "" though. Note this needs regenerating the kjava.jar BUG: 153362 M +1 -0 kjavaappletviewer.cpp M +4 -1 org/kde/kjas/server/KJASProtocolHandler.java WebSVN link: http://websvn.kde.org/?view=rev&revision=744487