Fix invalid read in render property buffer 34/52734/3
authorNick Holland <nick.holland@partner.samsung.com>
Thu, 26 Nov 2015 09:30:30 +0000 (09:30 +0000)
committerNick Holland <nick.holland@partner.samsung.com>
Thu, 26 Nov 2015 15:22:03 +0000 (15:22 +0000)
Change-Id: Ifb27e48a1470d0e128f598aa4c6664cb4046d9a8

automated-tests/src/dali-devel/utc-Dali-Geometry.cpp
dali/internal/render/renderers/render-property-buffer.cpp

index fda690c..961072a 100644 (file)
@@ -65,10 +65,12 @@ PropertyBuffer CreateVertexBuffer( const std::string& aPosition, const std::stri
 
 PropertyBuffer CreateIndexBuffer()
 {
-  unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
+  const unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
+  const unsigned int numberElements = sizeof(indexData)/sizeof(indexData[0]) ;
+
   Property::Map indexFormat;
   indexFormat["indices"] = Property::INTEGER;
-  PropertyBuffer indices = PropertyBuffer::New( indexFormat, 3 );
+  PropertyBuffer indices = PropertyBuffer::New( indexFormat, numberElements );
   indices.SetData(indexData);
 
   return indices;
@@ -446,7 +448,7 @@ int UtcDaliGeometrySetGetGeometryType02(void)
   tet_infoline("Test SetGeometryType and GetGeometryType: with index buffer");
 
   unsigned int numVertex = 4u;
-  unsigned int numIndex = 3u; // 6 unsigned short
+  unsigned int numIndex = 6u; // 6 unsigned short
   PropertyBuffer vertexBuffer = CreateVertexBuffer("aPosition", "aTexCoord" );
   PropertyBuffer indexBuffer = CreateIndexBuffer( );
 
index 4ec0ce3..0ce34f5 100644 (file)
@@ -151,6 +151,7 @@ bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
       DALI_ASSERT_DEBUG( mSize && "No data in the property buffer!" );
 
       const void *data = &((*mData)[0]);
+      std::size_t dataSize =  GetDataSize();
 
       // Index buffer needs to be unsigned short which is not supported by the property system
       Vector<unsigned short> ushortData;
@@ -163,6 +164,7 @@ bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
           ushortData[i] = unsignedData[i];
         }
         data = &(ushortData[0]);
+        dataSize = ushortData.Size() * sizeof( unsigned short );
       }
 
       GpuBuffer::Target target = GpuBuffer::ARRAY_BUFFER;
@@ -170,8 +172,7 @@ bool PropertyBuffer::Update( Context& context, bool isIndexBuffer )
       {
         target = GpuBuffer::ELEMENT_ARRAY_BUFFER;
       }
-
-      mGpuBuffer->UpdateDataBuffer( GetDataSize(), data, GpuBuffer::STATIC_DRAW, target );
+      mGpuBuffer->UpdateDataBuffer( dataSize, data, GpuBuffer::STATIC_DRAW, target );
 
     }