From ddd0a7507edf04d4ab0cfd105431df0ce09a77d5 Mon Sep 17 00:00:00 2001 From: Nimetu Date: Sun, 10 Nov 2019 23:23:55 +0200 Subject: [PATCH] Fixed: Invalid array access. Crash in gcc with aggressive loop optimizations enabled. --HG-- branch : patches-from-atys --- code/ryzom/server/src/ai_share/16x16_layer.cpp | 4 ++-- code/ryzom/server/src/ai_share/16x16_layer.h | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/code/ryzom/server/src/ai_share/16x16_layer.cpp b/code/ryzom/server/src/ai_share/16x16_layer.cpp index 4e78cf54e..734e4bde3 100644 --- a/code/ryzom/server/src/ai_share/16x16_layer.cpp +++ b/code/ryzom/server/src/ai_share/16x16_layer.cpp @@ -88,9 +88,9 @@ I16x16Layer *I16x16Layer::compress(I16x16Layer *layer, sint32 blank) map count; - for (i=0; i<256; ++i) + for (i=0; i<16; ++i) for (j=0;j<16;++j) { - sint32 val = flayer->Array[0][i]; + sint32 val = flayer->Array[i][j]; if (val == blank) continue; diff --git a/code/ryzom/server/src/ai_share/16x16_layer.h b/code/ryzom/server/src/ai_share/16x16_layer.h index d8c3af912..fd8853966 100644 --- a/code/ryzom/server/src/ai_share/16x16_layer.h +++ b/code/ryzom/server/src/ai_share/16x16_layer.h @@ -141,7 +141,11 @@ public: void set(uint i, uint j, sint value) { nlassert(i<16 && j<16); Array[i][j] = value; } protected: - void serial(NLMISC::IStream &f) { for (uint i=0; i<16*16; ++i) f.serial(Array[0][i]); } + void serial(NLMISC::IStream &f) { + for (uint i=0; i<16; ++i) + for (uint j=0; j<16; ++j) + f.serial(Array[i][j]); + } }; /** @@ -166,8 +170,9 @@ protected: void serial(NLMISC::IStream &f) { f.serial(Mean); - for (uint i=0; i<16*16; ++i) - f.serial(Array[0][i]); + for (uint i=0; i<16; ++i) + for(uint j=0; j<16; ++j) + f.serial(Array[i][j]); } }; @@ -193,8 +198,9 @@ protected: void serial(NLMISC::IStream &f) { f.serial(Mean); - for (uint i=0; i<16*2; ++i) - f.serial(Array[0][i]); + for (uint i=0; i<16; ++i) + for (uint j=0; j<2; ++j) + f.serial(Array[i][j]); } };