Skip to content

Commit

Permalink
fix buildMessage from null Message caused coredump (#43)
Browse files Browse the repository at this point in the history
* fix buildMessage from null Message caused coredump

* fix the buffer released after convert to java byte-array
  • Loading branch information
cyjseagull authored Sep 24, 2024
1 parent 84bbab6 commit 7556ad5
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@

package com.webank.wedpr.sdk.jni.demo;

import com.webank.wedpr.sdk.jni.common.WeDPRSDKException;
import com.webank.wedpr.sdk.jni.generated.*;
import com.webank.wedpr.sdk.jni.generated.Error;
import com.webank.wedpr.sdk.jni.transport.IMessage;
import com.webank.wedpr.sdk.jni.transport.TransportConfig;
import com.webank.wedpr.sdk.jni.transport.WeDPRTransport;
import com.webank.wedpr.sdk.jni.transport.handlers.MessageCallback;
import com.webank.wedpr.sdk.jni.transport.handlers.MessageDispatcherCallback;
import com.webank.wedpr.sdk.jni.transport.handlers.MessageErrorCallback;
import com.webank.wedpr.sdk.jni.transport.impl.TransportImpl;
Expand All @@ -30,13 +30,15 @@
public class TransportDemo {
public static class MessageDispatcherCallbackImpl extends MessageDispatcherCallback {
private final String nodeID;
private final WeDPRTransport weDPRTransport;

// java -cp 'conf/:lib/*:apps/*' com.webank.wedpr.sdk.jni.demo.TransportDemo agency0Node
// "127.0.0.1" 9020 "ipv4:127.0.0.1:40600,127.0.0.1:40601" "agency1Node"
// java -cp 'conf/:lib/*:apps/*' com.webank.wedpr.sdk.jni.demo.TransportDemo agency1Node
// "127.0.0.1" 9021 "ipv4:127.0.0.1:40620,127.0.0.1:40621" "agency0Node"
public MessageDispatcherCallbackImpl(String nodeID) {
public MessageDispatcherCallbackImpl(String nodeID, WeDPRTransport transport) {
this.nodeID = nodeID;
this.weDPRTransport = transport;
}

@SneakyThrows(Exception.class)
Expand All @@ -50,7 +52,38 @@ public void onMessage(IMessage message) {
+ ", payload: "
+ new String(message.getPayload())
+ "#######");
throw new WeDPRSDKException("Exception test");

String response = "#### hello, response!";
System.out.println(
"#### sendResponse: "
+ response
+ ", traceID: "
+ message.getHeader().getTraceID()
+ ",srcNode: "
+ new String(message.getHeader().getSrcNode()));
this.weDPRTransport.asyncSendResponse(
message.getHeader().getSrcNode(),
message.getHeader().getTraceID(),
response.getBytes(),
0,
new MessageErrorCallbackImpl(this.nodeID));
}
}

public static class MessageCallbackImpl extends MessageCallback {

@Override
public void onMessage(
Error error, IMessage message, SendResponseHandler sendResponseHandler) {
if (error != null && error.errorCode() != 0) {
System.out.println("#### MessageCallbackImpl error: " + error.errorMessage());
return;
}
System.out.println(
"#### receive response: "
+ message
+ ", payload: "
+ new String(message.getPayload()));
}
}

Expand Down Expand Up @@ -111,7 +144,7 @@ public static void main(String[] args) throws Exception {
// send Message to the gateway
String topic = "testTopic";
MessageDispatcherCallback messageDispatcherCallback =
new MessageDispatcherCallbackImpl(nodeID);
new MessageDispatcherCallbackImpl(nodeID, transport);
transport.registerTopicHandler(topic, messageDispatcherCallback);
System.out.println("##### register topic success");

Expand All @@ -130,7 +163,7 @@ public static void main(String[] args) throws Exception {
0,
10000,
new MessageErrorCallbackImpl(nodeID),
null);
new MessageCallbackImpl());

// push
String syncPayload = "sync_" + payLoad;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@

public class IMessageBuilder {
public static IMessage build(Message msg) {
if (msg == null) {
return null;
}
return new MessageImpl(msg);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,22 @@ static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionC

#define SWIG_contract_assert(nullreturn, expr, msg) do { if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } } while (0)

/* SWIG Errors applicable to all language modules, values are reserved from -1 to -99 */
#define SWIG_UnknownError -1
#define SWIG_IOError -2
#define SWIG_RuntimeError -3
#define SWIG_IndexError -4
#define SWIG_TypeError -5
#define SWIG_DivisionByZero -6
#define SWIG_OverflowError -7
#define SWIG_SyntaxError -8
#define SWIG_ValueError -9
#define SWIG_SystemError -10
#define SWIG_AttributeError -11
#define SWIG_MemoryError -12
#define SWIG_NullReferenceError -13


/* -----------------------------------------------------------------------------
* director_common.swg
*
Expand Down Expand Up @@ -836,6 +852,44 @@ template <typename T> T SwigValueInit() {
#include <stdint.h> // Use the C99 official header


SWIGINTERN void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) {
SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError;
switch(code) {
case SWIG_MemoryError:
exception_code = SWIG_JavaOutOfMemoryError;
break;
case SWIG_IOError:
exception_code = SWIG_JavaIOException;
break;
case SWIG_SystemError:
case SWIG_RuntimeError:
exception_code = SWIG_JavaRuntimeException;
break;
case SWIG_OverflowError:
case SWIG_IndexError:
exception_code = SWIG_JavaIndexOutOfBoundsException;
break;
case SWIG_DivisionByZero:
exception_code = SWIG_JavaArithmeticException;
break;
case SWIG_SyntaxError:
case SWIG_ValueError:
case SWIG_TypeError:
exception_code = SWIG_JavaIllegalArgumentException;
break;
case SWIG_UnknownError:
default:
exception_code = SWIG_JavaUnknownError;
break;
}
SWIG_JavaThrowException(jenv, exception_code, msg);
}


#include <typeinfo>
#include <stdexcept>


#include <typeinfo>
#include <stdexcept>

Expand Down Expand Up @@ -3766,7 +3820,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav
{
jresult = jenv->NewByteArray((&result)->len);
jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data);
delete[] (&result)->data;
}
return jresult;
}
Expand Down Expand Up @@ -3877,7 +3930,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav
{
jresult = jenv->NewByteArray((&result)->len);
jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data);
delete[] (&result)->data;
}
return jresult;
}
Expand Down Expand Up @@ -4882,7 +4934,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav
{
jresult = jenv->NewByteArray((&result)->len);
jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data);
delete[] (&result)->data;
}
return jresult;
}
Expand Down Expand Up @@ -5444,7 +5495,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav
{
jresult = jenv->NewByteArray((&result)->len);
jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data);
delete[] (&result)->data;
}
return jresult;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

%include "stdint.i"
%include "typemaps.i"
%include <exception.i>

#if defined(SWIGJAVA)
#if defined(SWIGWORDSIZE64)
Expand Down Expand Up @@ -173,11 +174,10 @@ namespace bcos{
%typemap(argout) OutputBuffer {
JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *) $1.data, 0);
}
// Note: will cause copy herer
// Note: will cause copy here
%typemap(out) OutputBuffer {
$result = JCALL1(NewByteArray, jenv, $1.len);
JCALL4(SetByteArrayRegion, jenv, $result, 0, $1.len, (jbyte *) $1.data);
delete[] $1.data;
}
%typemap(javain) OutputBuffer "$javainput"
%typemap(javaout) OutputBuffer { return $jnicall; }
Expand Down

0 comments on commit 7556ad5

Please sign in to comment.