From faf770c5983daddf51b1966027e689351c90a51e Mon Sep 17 00:00:00 2001
From: Andrew <munin@mimisbrunnr.net>
Date: Thu, 25 Jul 2013 16:52:03 -0400
Subject: [PATCH] .

---
 parser-library/buffer.cpp |  9 ++++++---
 parser-library/parse.cpp  | 11 +++++++++--
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/parser-library/buffer.cpp b/parser-library/buffer.cpp
index d42b47f..84e297e 100644
--- a/parser-library/buffer.cpp
+++ b/parser-library/buffer.cpp
@@ -82,6 +82,9 @@ bounded_buffer *readFileToFileBuffer(const char *filePath) {
 //split buffer inclusively from from to to by offset
 bounded_buffer *splitBuffer(bounded_buffer *b, ::uint32_t from, ::uint32_t to) {
   //safety checks
+  if(to < from || to >= b->bufLen) {
+    return NULL;
+  }
   
   //make a new buffer
   bounded_buffer  *newBuff = new bounded_buffer();
@@ -91,9 +94,9 @@ bounded_buffer *splitBuffer(bounded_buffer *b, ::uint32_t from, ::uint32_t to) {
   }
 
   newBuff->copy = true;
-
-  ::uint8_t   *curPtr = b->buf;
-  ::uint8_t   *newPtr = curPtr+from;
+  ::uint8_t   *newPtr = b->buf+from;
+  newBuff->buf = newPtr;
+  newBuff->bufLen = b->bufLen-(to-from);
 
   return newBuff;
 }
diff --git a/parser-library/parse.cpp b/parser-library/parse.cpp
index 9cbd109..1ad2609 100644
--- a/parser-library/parse.cpp
+++ b/parser-library/parse.cpp
@@ -27,6 +27,9 @@ list<section> getSections(bounded_buffer *file) {
 }
 
 bool readNtHeader(bounded_buffer *b, nt_header_32 &header) {
+  if(b == NULL) {
+    return false;
+  }
 
   return false;
 }
@@ -34,6 +37,10 @@ bool readNtHeader(bounded_buffer *b, nt_header_32 &header) {
 bool getHeader(bounded_buffer *file) {
   pe_header p;
 
+  if(file == NULL) {
+    return false;
+  }
+
   //start by reading MZ
   ::uint16_t  tmp = 0;
   ::uint32_t  curOffset = 0;
@@ -51,8 +58,8 @@ bool getHeader(bounded_buffer *file) {
   curOffset += offset; 
 
   //now, we can read out the fields of the NT headers
-  nt_header_32 nthdr;
-  if(readNtHeader(splitBuffer(file, curOffset, file->bufLen), nthdr) == false) {
+  nt_header_32 nt;
+  if(readNtHeader(splitBuffer(file, curOffset, file->bufLen-1), nt) == false) {
     return false;
   }