summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2018-01-07 19:33:56 +0100
committerSergey Poznyakoff <gray@gnu.org.ua>2018-01-07 19:33:56 +0100
commit8c68d2a748ce641209d4e4a142a14ca2b0477c5a (patch)
tree50abf32d61d790263817f3e563f27f62d61c437a
parent14ec080ad440a76234a89f8d8a058eac6d3fe4eb (diff)
downloadfileserv-8c68d2a748ce641209d4e4a142a14ca2b0477c5a.tar.gz
fileserv-8c68d2a748ce641209d4e4a142a14ca2b0477c5a.tar.bz2
Uniformly handle out of memory conditions
-rw-r--r--mimetypes/err.c7
-rw-r--r--mimetypes/grammar.y8
-rw-r--r--mimetypes/lexer.l8
-rw-r--r--mimetypes/linetrack.c6
-rw-r--r--mimetypes/mtint.h1
5 files changed, 21 insertions, 9 deletions
diff --git a/mimetypes/err.c b/mimetypes/err.c
index 39f25a5..01164c9 100644
--- a/mimetypes/err.c
+++ b/mimetypes/err.c
@@ -148,3 +148,10 @@ print_locus_range (FILE *fp, struct locus_range const *lr)
148 fwrite (buf, buflen, 1, fp); 148 fwrite (buf, buflen, 1, fp);
149 free (buf); 149 free (buf);
150} 150}
151
152void
153mimetypes_nomem (void)
154{
155 mimetypes_error_printer ("out of memory");
156 abort ();
157}
diff --git a/mimetypes/grammar.y b/mimetypes/grammar.y
index 2ae1997..2ddc1fd 100644
--- a/mimetypes/grammar.y
+++ b/mimetypes/grammar.y
@@ -55,6 +55,8 @@ arg_list_append (struct arg_list *al, struct mimetypes_string const *str)
55{ 55{
56 struct arg_elt *elt; 56 struct arg_elt *elt;
57 elt = malloc (sizeof *elt); 57 elt = malloc (sizeof *elt);
58 if (!elt)
59 mimetypes_nomem ();
58 elt->string.ptr = str->ptr; 60 elt->string.ptr = str->ptr;
59 elt->string.len = str->len; 61 elt->string.len = str->len;
60 LLE_APPEND (al, elt, link); 62 LLE_APPEND (al, elt, link);
@@ -126,6 +128,8 @@ rule_line: /* empty */
126 | TYPE maybe_rule maybe_priority 128 | TYPE maybe_rule maybe_priority
127 { 129 {
128 struct rule *p = malloc (sizeof (*p)); 130 struct rule *p = malloc (sizeof (*p));
131 if (!p)
132 mimetypes_nomem ();
129 LLE_APPEND (&rule_list, p, link); 133 LLE_APPEND (&rule_list, p, link);
130 p->type = $1.ptr; 134 p->type = $1.ptr;
131 p->node = $2; 135 p->node = $2;
@@ -271,6 +275,8 @@ static struct node *
271make_node (enum node_type type, struct locus_range const *loc) 275make_node (enum node_type type, struct locus_range const *loc)
272{ 276{
273 struct node *p = malloc (sizeof *p); 277 struct node *p = malloc (sizeof *p);
278 if (!p)
279 mimetypes_nomem ();
274 p->type = type; 280 p->type = type;
275 locus_range_init (&p->loc); 281 locus_range_init (&p->loc);
276 locus_range_copy (&p->loc, loc); 282 locus_range_copy (&p->loc, loc);
@@ -339,6 +345,8 @@ make_functional_node (char *ident, struct arg_list *list,
339 } 345 }
340 346
341 args = calloc (count, sizeof *args); 347 args = calloc (count, sizeof *args);
348 if (!args)
349 mimetypes_nomem ();
342 i = 0; 350 i = 0;
343 LL_FOREACH (list, elt, link) 351 LL_FOREACH (list, elt, link)
344 { 352 {
diff --git a/mimetypes/lexer.l b/mimetypes/lexer.l
index 568a5cf..1e4c8ac 100644
--- a/mimetypes/lexer.l
+++ b/mimetypes/lexer.l
@@ -49,7 +49,7 @@ string_moremem (size_t size)
49 } 49 }
50 string_buffer = realloc (string_buffer, string_size); 50 string_buffer = realloc (string_buffer, string_size);
51 if (!string_buffer) 51 if (!string_buffer)
52 abort (); 52 mimetypes_nomem ();
53 } 53 }
54} 54}
55 55
@@ -87,7 +87,7 @@ finish_string (void)
87{ 87{
88 yylval.string.ptr = malloc (string_level + 1); 88 yylval.string.ptr = malloc (string_level + 1);
89 if (!yylval.string.ptr) 89 if (!yylval.string.ptr)
90 abort (); 90 mimetypes_nomem ();
91 memcpy (yylval.string.ptr, string_buffer, string_level); 91 memcpy (yylval.string.ptr, string_buffer, string_level);
92 yylval.string.ptr[string_level] = 0; 92 yylval.string.ptr[string_level] = 0;
93 yylval.string.len = string_level; 93 yylval.string.len = string_level;
@@ -99,7 +99,7 @@ finish_astring (void)
99{ 99{
100 yylval.string.ptr = malloc (string_level + 1); 100 yylval.string.ptr = malloc (string_level + 1);
101 if (!yylval.string.ptr) 101 if (!yylval.string.ptr)
102 abort (); 102 mimetypes_nomem ();
103 memcpy (yylval.string.ptr, string_buffer, string_level); 103 memcpy (yylval.string.ptr, string_buffer, string_level);
104 yylval.string.ptr[string_level] = 0; 104 yylval.string.ptr[string_level] = 0;
105 yylval.string.len = string_level; 105 yylval.string.len = string_level;
@@ -284,7 +284,7 @@ mimetypes_open (const char *name)
284 abort (); 284 abort ();
285 filename = malloc (blen + 1 + strlen (fname) + 1); 285 filename = malloc (blen + 1 + strlen (fname) + 1);
286 if (!filename) 286 if (!filename)
287 abort (); 287 mimetypes_nomem ();
288 strcpy (filename, name); 288 strcpy (filename, name);
289 strcat (filename, "/"); 289 strcat (filename, "/");
290 strcat (filename, fname); 290 strcat (filename, fname);
diff --git a/mimetypes/linetrack.c b/mimetypes/linetrack.c
index 90754ea..dda1636 100644
--- a/mimetypes/linetrack.c
+++ b/mimetypes/linetrack.c
@@ -365,11 +365,7 @@ linetrack_retreat (struct linetrack *trk, size_t n)
365 { 365 {
366 ptr = pop (trk); 366 ptr = pop (trk);
367 if (!ptr || *ptr == 0) 367 if (!ptr || *ptr == 0)
368 { 368 return ERANGE;
369 mimetypes_error ("%s:%d: INTERNAL ERROR: out of pop back\n",
370 __FILE__, __LINE__);
371 return ERANGE;
372 }
373 } 369 }
374 --*ptr; 370 --*ptr;
375 } 371 }
diff --git a/mimetypes/mtint.h b/mimetypes/mtint.h
index 0458e4d..a3324d1 100644
--- a/mimetypes/mtint.h
+++ b/mimetypes/mtint.h
@@ -157,6 +157,7 @@ ssize_t mimetypes_error_format (char **pbuf, size_t *psize,
157void mimetypes_error_at (struct locus_range const *lr, char const *fmt, ...); 157void mimetypes_error_at (struct locus_range const *lr, char const *fmt, ...);
158void mimetypes_error (char const *fmt, ...); 158void mimetypes_error (char const *fmt, ...);
159void print_locus_range (FILE *fp, struct locus_range const *lr); 159void print_locus_range (FILE *fp, struct locus_range const *lr);
160void mimetypes_nomem (void);
160 161
161int mimetypes_open (const char *name); 162int mimetypes_open (const char *name);
162void mimetypes_close (void); 163void mimetypes_close (void);

Return to:

Send suggestions and report system problems to the System administrator.