]> granicus.if.org Git - jq/commitdiff
Print an error message and abort in out-of-memory situations.
authorStephen Dolan <mu@netsoc.tcd.ie>
Tue, 18 Dec 2012 17:01:23 +0000 (17:01 +0000)
committerStephen Dolan <mu@netsoc.tcd.ie>
Tue, 18 Dec 2012 17:01:23 +0000 (17:01 +0000)
Closes #43.

Tested with:

    ulimit -v 5000
    ./jq -n -c 'def f(x): x,f([x,x]); f(0)'

jv_alloc.c

index 3e1c8fe7b2c15c4044e13c80b4153b13d1a2dde7..320f16e197f68e79a44215548949bc4cf6a0877c 100644 (file)
@@ -1,9 +1,18 @@
 #include <stdlib.h>
+#include <stdio.h>
 #include "jv_alloc.h"
 
+static void memory_exhausted() {
+  fprintf(stderr, "error: cannot allocate memory\n");
+  abort();
+}
 
 void* jv_mem_alloc(size_t sz) {
-  return malloc(sz);
+  void* p = malloc(sz);
+  if (!p) {
+    memory_exhausted();
+  }
+  return p;
 }
 
 void jv_mem_free(void* p) {
@@ -11,5 +20,9 @@ void jv_mem_free(void* p) {
 }
 
 void* jv_mem_realloc(void* p, size_t sz) {
-  return realloc(p, sz);
+  p = realloc(p, sz);
+  if (!p) {
+    memory_exhausted();
+  }
+  return p;
 }