Browse Source

Fix nullpointer issue in generated files

- Return from private setter when nullpointer is assigned to value
- Implement test
Alexey Edelev 5 years ago
parent
commit
f46f01043b
2 changed files with 8 additions and 0 deletions
  1. 1 0
      src/generator/templates.cpp
  2. 7 0
      tests/test_protobuf/simpletest.cpp

+ 1 - 0
src/generator/templates.cpp

@@ -125,6 +125,7 @@ const char *Templates::QmlListGetterTemplate = "QQmlListProperty<$type_nolist$>
 const char *Templates::SetterTemplateMessageType = "void set$property_name_cap$_p($type$ *$property_name$) {\n"
                                                    "    if ($property_name$ == nullptr) {\n"
                                                    "        m_$property_name$ = {};\n"
+                                                   "        return;\n"
                                                    "    }\n"
                                                    "    if (m_$property_name$ != *$property_name$) {\n"
                                                    "        m_$property_name$ = *$property_name$;\n"

+ 7 - 0
tests/test_protobuf/simpletest.cpp

@@ -736,5 +736,12 @@ TEST_F(SimpleTest, EmptyMessageTest)
     ASSERT_EQ(EmptyMessage::staticMetaObject.propertyCount(), 1);
 }
 
+TEST_F(SimpleTest, NullPointerMessageTest)
+{
+    ComplexMessage msg(0, {QString("not null")});
+    msg.setTestComplexField_p(nullptr);
+    ASSERT_TRUE(msg.testComplexField().testFieldString().isEmpty());
+}
+
 } // tests
 } // qtprotobuf