Fixed the double delete problem remaining in issue 503.
authordswitkin@google.com <dswitkin@google.com@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Mon, 16 Aug 2010 15:34:00 +0000 (15:34 +0000)
committerdswitkin@google.com <dswitkin@google.com@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Mon, 16 Aug 2010 15:34:00 +0000 (15:34 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@1536 59b500cc-1b3d-0410-9834-0bbf25fbcc57

cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp

index 07c8ba2..4910b65 100644 (file)
@@ -48,14 +48,16 @@ unsigned char* GreyscaleLuminanceSource::getRow(int y, unsigned char* row) {
 }
 
 unsigned char* GreyscaleLuminanceSource::getMatrix() {
-  if (left_ != 0 || top_ != 0 || dataWidth_ != width_ || dataHeight_ != height_) {
-    unsigned char* cropped = new unsigned char[width_ * height_];
+  int size = width_ * height_;
+  unsigned char* result = new unsigned char[size];
+  if (left_ == 0 && top_ == 0 && dataWidth_ == width_ && dataHeight_ == height_) {
+    memcpy(result, greyData_, size);
+  } else {
     for (int row = 0; row < height_; row++) {
-      memcpy(cropped + row * width_, greyData_ + (top_ + row) * dataWidth_ + left_, width_);
+      memcpy(result + row * width_, greyData_ + (top_ + row) * dataWidth_ + left_, width_);
     }
-    return cropped;
   }
-  return greyData_;
+  return result;
 }
 
 Ref<LuminanceSource> GreyscaleLuminanceSource::rotateCounterClockwise() {