[GiNaC-devel] [PATCH 5/6] ncmul::eval(): don't write beyond the end of the vector.

Alexei Sheplyakov varg at metalica.kh.ua
Sat Aug 8 12:03:38 CEST 2009


---
 ginac/ncmul.cpp |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/ginac/ncmul.cpp b/ginac/ncmul.cpp
index 0c22a81..fff307d 100644
--- a/ginac/ncmul.cpp
+++ b/ginac/ncmul.cpp
@@ -339,15 +339,15 @@ ex ncmul::eval(int level) const
 	if (assocseq.empty()) return _ex1;
 
 	// determine return types
-	unsignedvector rettypes;
-	rettypes.reserve(assocseq.size());
+	unsignedvector rettypes(assocseq.size());
 	size_t i = 0;
 	size_t count_commutative=0;
 	size_t count_noncommutative=0;
 	size_t count_noncommutative_composite=0;
 	cit = assocseq.begin(); citend = assocseq.end();
 	while (cit != citend) {
-		switch (rettypes[i] = cit->return_type()) {
+		rettypes[i] = cit->return_type();
+		switch (rettypes[i]) {
 		case return_types::commutative:
 			count_commutative++;
 			break;
-- 
1.6.3.3



More information about the GiNaC-devel mailing list