forループで加算?

調査中の組み込みプログラムのソースにこんな関数があった。

uint32 base[9];   //値は他所で代入される

uint32 hoge(uint8 *array)
{
	uint8 i , j;
	uint32 temp = 0;

	for(i = 9;i > 0;i--)
	{
	 	for(j = array[i-1];j > 0;j--)
		{
			temp += base[i-1];
		}
	}
	
	return temp;
}

一見しただけでは何をする関数なのか分からなかったが、どうやら2つの配列の要素ごとを掛け合わせた和を返す関数らしい。つまりこういうこと。

#define ARRAY_SIZE  9
uint32 base[ARRAY_SIZE];   //値は他所で代入される

uint32 hoge(uint8 *array)
{
	int i;
	uint32 sum = 0;

	for(i = 0; i < ARRAY_SIZE; ++i) {
		sum += array[i] * base[i];
	}
	return sum;
}

掛け算の代わりにforループで加算を繰り返しているのは、もしかして array[i] * base[i] がuint8型の最大値を超えてオーバーフローが起こることを心配しているのだろうか?
おそらく実際には、使用しているCPUのビット幅(32bit)で乗算が行われるのでオーバーフローは起こらないだろう。そもそも base[i] はもともと uint32型だし。それでもどうしても気になるなら

	uint32 temp;
	//...
	temp = array[i];
	sum += temp * base[i];

のように先に32bit変数に代入しておけば十分だと思う。
なんにせよ、乗算で済むところをループで加算する理由が分からない。また、しかもループカウントがデクリメントなのも不自然だと思う。