#include "parcel-internal.h"
#include "port-internal.h"
+#define MAX_PARCEL_SIZE (1024 * 1024 * 10)
+
#undef RPC_API
#define RPC_API extern "C" __attribute__((visibility("default")))
if (ret != 0)
return ret;
+ if (len <= 0 || len > MAX_PARCEL_SIZE)
+ return RPC_PORT_ERROR_IO_ERROR;
buf = new unsigned char[len];
ret = rpc_port_read(port, buf, len);
if (ret != 0) {
using namespace std;
using ::testing::AtLeast;
+namespace {
+class CStringHolder {
+ public:
+ CStringHolder(char* ptr) noexcept
+ : ptr_(ptr) {}
+ ~CStringHolder() {
+ if (ptr_)
+ free(ptr_);
+ }
+
+ const char* Get() const {
+ return ptr_;
+ }
+
+ private:
+ char* ptr_;
+};
+}
+
class ParcelTest : public ::testing::Test {
public:
virtual void SetUp() {
static void ReadParcelable(rpc_port_parcel_h h, void* data) {
char* s = nullptr;
int ret = rpc_port_parcel_read_string(h, &s);
+ ::CStringHolder str(s);
ASSERT_EQ(ret, 0);
- ASSERT_STREQ(s, "abcdef");
- free(s);
+ ASSERT_STREQ(str.Get(), "abcdef");
double b;
ret = rpc_port_parcel_read_double(h, &b);
char* s = nullptr;
ret = rpc_port_parcel_read_string(handle_, &s);
+ ::CStringHolder s1(s);
ASSERT_EQ(ret, 0);
- ASSERT_STREQ(s, str);
- free(s);
+ ASSERT_STREQ(s1.Get(), str);
}
TEST_F(ParcelTest, read_write_bool) {