[Forensics-changes] [yara] 112/135: Improve error handling

Hilko Bengen bengen at moszumanska.debian.org
Sat Jul 1 10:27:38 UTC 2017


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag v3.1.0
in repository yara.

commit f56608c51753ad885fff6af7f660828bcb3a2ec1
Author: Victor M. Alvarez <plusvic at gmail.com>
Date:   Thu Aug 21 13:26:57 2014 +0200

    Improve error handling
---
 libyara/include/yara/libyara.h |  4 ++--
 libyara/include/yara/mem.h     |  4 ++--
 libyara/libyara.c              | 21 +++++++++++++--------
 libyara/mem.c                  | 27 ++++++++++++++++++++-------
 yara-python/yara-python.c      |  6 +++++-
 yara.c                         |  9 ++++++++-
 yarac.c                        |  5 ++++-
 7 files changed, 54 insertions(+), 22 deletions(-)

diff --git a/libyara/include/yara/libyara.h b/libyara/include/yara/libyara.h
index 419a601..f4b5445 100644
--- a/libyara/include/yara/libyara.h
+++ b/libyara/include/yara/libyara.h
@@ -17,10 +17,10 @@ limitations under the License.
 #ifndef YR_LIBYARA_H
 #define YR_LIBYARA_H
 
-void yr_initialize(void);
+int yr_initialize(void);
 
 
-void yr_finalize(void);
+int yr_finalize(void);
 
 
 void yr_finalize_thread(void);
diff --git a/libyara/include/yara/mem.h b/libyara/include/yara/mem.h
index 6d26e74..0c2aaa1 100644
--- a/libyara/include/yara/mem.h
+++ b/libyara/include/yara/mem.h
@@ -47,9 +47,9 @@ char* yr_strdup(
 
 #endif
 
-void yr_heap_alloc();
+int yr_heap_alloc();
 
-void yr_heap_free();
+int yr_heap_free();
 
 #endif
 
diff --git a/libyara/libyara.c b/libyara/libyara.c
index cfa5991..4a51153 100644
--- a/libyara/libyara.c
+++ b/libyara/libyara.c
@@ -18,6 +18,7 @@ limitations under the License.
 #include <stdio.h>
 #include <ctype.h>
 
+#include <yara/error.h>
 #include <yara/mem.h>
 #include <yara/re.h>
 #include <yara/modules.h>
@@ -49,7 +50,7 @@ char altercase[256];
 // function from libyara.
 //
 
-void yr_initialize(void)
+int yr_initialize(void)
 {
   int i;
 
@@ -65,7 +66,7 @@ void yr_initialize(void)
     lowercase[i] = tolower(i);
   }
 
-  yr_heap_alloc();
+  FAIL_ON_ERROR(yr_heap_alloc());
 
   #ifdef _WIN32
   tidx_key = TlsAlloc();
@@ -75,8 +76,10 @@ void yr_initialize(void)
   pthread_key_create(&recovery_state_key, NULL);
   #endif
 
-  yr_re_initialize();
-  yr_modules_initialize();
+  FAIL_ON_ERROR(yr_re_initialize());
+  FAIL_ON_ERROR(yr_modules_initialize());
+
+  return ERROR_SUCCESS;
 }
 
 
@@ -100,7 +103,7 @@ void yr_finalize_thread(void)
 // calls it.
 //
 
-void yr_finalize(void)
+int yr_finalize(void)
 {
   yr_re_finalize_thread();
 
@@ -112,9 +115,11 @@ void yr_finalize(void)
   pthread_key_delete(recovery_state_key);
   #endif
 
-  yr_re_finalize();
-  yr_modules_finalize();
-  yr_heap_free();
+  FAIL_ON_ERROR(yr_re_finalize());
+  FAIL_ON_ERROR(yr_modules_finalize());
+  FAIL_ON_ERROR(yr_heap_free());
+
+  return ERROR_SUCCESS;
 }
 
 //
diff --git a/libyara/mem.c b/libyara/mem.c
index bf4f4d8..e18e3f5 100644
--- a/libyara/mem.c
+++ b/libyara/mem.c
@@ -14,22 +14,34 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+
+
 #ifdef _WIN32
 
 #include <windows.h>
 #include <string.h>
 
+#include <yara/error.h>
+
 static HANDLE hHeap;
 
-void yr_heap_alloc()
+int yr_heap_alloc()
 {
   hHeap = HeapCreate(0, 0x8000, 0);
+
+  if (hHeap == NULL)
+    return ERROR_INTERNAL_FATAL_ERROR;
+
+  return ERROR_SUCCESS;
 }
 
 
-void yr_heap_free()
+int yr_heap_free()
 {
-  HeapDestroy(hHeap);
+  if (HeapDestroy(hHeap))
+    return ERROR_SUCCESS;
+  else
+    return ERROR_INTERNAL_FATAL_ERROR;
 }
 
 
@@ -68,16 +80,17 @@ char* yr_strdup(const char *str)
 #include <string.h>
 #include <stdio.h>
 
+#include <yara/error.h>
 
-void yr_heap_alloc()
+int yr_heap_alloc()
 {
-  return;
+  return ERROR_SUCCESS;
 }
 
 
-void yr_heap_free()
+int yr_heap_free()
 {
-  return;
+  return ERROR_SUCCESS;
 }
 
 
diff --git a/yara-python/yara-python.c b/yara-python/yara-python.c
index 6839750..b531ee5 100644
--- a/yara-python/yara-python.c
+++ b/yara-python/yara-python.c
@@ -1509,7 +1509,11 @@ MOD_INIT(yara)
   PyModule_AddObject(m, "TimeoutError", YaraTimeoutError);
   PyModule_AddObject(m, "WarningError", YaraWarningError);
 
-  yr_initialize();
+  if (yr_initialize() == ERROR_SUCCESS)
+  {
+    PyErr_SetString(YareError, "initialization error");
+    return MOD_ERROR_VAL;
+  }
 
   Py_AtExit(yr_finalize);
 
diff --git a/yara.c b/yara.c
index 9160be4..79519da 100644
--- a/yara.c
+++ b/yara.c
@@ -945,7 +945,14 @@ int main(
     return EXIT_FAILURE;
   }
 
-  yr_initialize();
+  result = yr_initialize();
+
+  if (result != ERROR_SUCCESS)
+  {
+    fprintf(stderr, "initialization error: %d\n", result);
+    cleanup();
+    return EXIT_FAILURE;
+  }
 
   result = yr_rules_load(argv[optind], &rules);
 
diff --git a/yarac.c b/yarac.c
index 157e42a..f45361d 100644
--- a/yarac.c
+++ b/yarac.c
@@ -171,7 +171,10 @@ int main(
   YR_RULES* rules;
   FILE* rule_file;
 
-  yr_initialize();
+  result = yr_initialize();
+
+  if (result != ERROR_SUCCESS)
+    return EXIT_FAILURE;
 
   if (yr_compiler_create(&compiler) != ERROR_SUCCESS)
   {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list