From 478876c1af94d7aca32fdbcab88a3e0200b01fd5 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 6 Aug 2010 01:24:52 -0700 Subject: [PATCH] Corrects delete/delete[] issue. Fixes bug #613723. --- src/trace/quantize.cpp | 58 ++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/src/trace/quantize.cpp b/src/trace/quantize.cpp index 8acfe0c34..2db1bbf34 100644 --- a/src/trace/quantize.cpp +++ b/src/trace/quantize.cpp @@ -545,44 +545,48 @@ IndexedMap *rgbMapQuantize(RgbMap *rgbmap, int ncolor) assert(rgbmap); assert(ncolor > 0); + IndexedMap *newmap = 0; + pool pool; - Ocnode *tree; + Ocnode *tree = 0; try { - tree = octreeBuild(&pool, rgbmap, ncolor); + tree = octreeBuild(&pool, rgbmap, ncolor); } - catch (std::bad_alloc& ex) { - return NULL; //should do smthg else? + catch (std::bad_alloc &ex) { + //should do smthg else? } - RGB *rgbpal = new RGB[ncolor]; - int indexes = 0; - octreeIndex(tree, rgbpal, &indexes); - - octreeDelete(&pool, tree); + if ( tree ) { + RGB *rgbpal = new RGB[ncolor]; + int indexes = 0; + octreeIndex(tree, rgbpal, &indexes); - // stacking with increasing contrasts - qsort((void *)rgbpal, indexes, sizeof(RGB), compRGB); + octreeDelete(&pool, tree); - // make the new map - IndexedMap *newmap = IndexedMapCreate(rgbmap->width, rgbmap->height); - if (!newmap) { delete rgbpal; return NULL; } + // stacking with increasing contrasts + qsort((void *)rgbpal, indexes, sizeof(RGB), compRGB); - // fill in the color lookup table - for (int i = 0; i < indexes; i++) newmap->clut[i] = rgbpal[i]; - newmap->nrColors = indexes; - - // fill in new map pixels - for (int y = 0; y < rgbmap->height; y++) - { - for (int x = 0; x < rgbmap->width; x++) - { - RGB rgb = rgbmap->getPixel(rgbmap, x, y); - int index = findRGB(rgbpal, ncolor, rgb); - newmap->setPixel(newmap, x, y, index); + // make the new map + newmap = IndexedMapCreate(rgbmap->width, rgbmap->height); + if (newmap) { + // fill in the color lookup table + for (int i = 0; i < indexes; i++) { + newmap->clut[i] = rgbpal[i]; + } + newmap->nrColors = indexes; + + // fill in new map pixels + for (int y = 0; y < rgbmap->height; y++) { + for (int x = 0; x < rgbmap->width; x++) { + RGB rgb = rgbmap->getPixel(rgbmap, x, y); + int index = findRGB(rgbpal, ncolor, rgb); + newmap->setPixel(newmap, x, y, index); + } } } + delete[] rgbpal; + } - delete rgbpal; return newmap; } -- 2.30.2