diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-01-07 19:33:56 +0100 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-01-07 19:33:56 +0100 |
commit | 8c68d2a748ce641209d4e4a142a14ca2b0477c5a (patch) | |
tree | 50abf32d61d790263817f3e563f27f62d61c437a | |
parent | 14ec080ad440a76234a89f8d8a058eac6d3fe4eb (diff) | |
download | fileserv-8c68d2a748ce641209d4e4a142a14ca2b0477c5a.tar.gz fileserv-8c68d2a748ce641209d4e4a142a14ca2b0477c5a.tar.bz2 |
Uniformly handle out of memory conditions
-rw-r--r-- | mimetypes/err.c | 7 | ||||
-rw-r--r-- | mimetypes/grammar.y | 8 | ||||
-rw-r--r-- | mimetypes/lexer.l | 8 | ||||
-rw-r--r-- | mimetypes/linetrack.c | 6 | ||||
-rw-r--r-- | mimetypes/mtint.h | 1 |
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 | |||
152 | void | ||
153 | mimetypes_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 * | |||
271 | make_node (enum node_type type, struct locus_range const *loc) | 275 | make_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, | |||
157 | void mimetypes_error_at (struct locus_range const *lr, char const *fmt, ...); | 157 | void mimetypes_error_at (struct locus_range const *lr, char const *fmt, ...); |
158 | void mimetypes_error (char const *fmt, ...); | 158 | void mimetypes_error (char const *fmt, ...); |
159 | void print_locus_range (FILE *fp, struct locus_range const *lr); | 159 | void print_locus_range (FILE *fp, struct locus_range const *lr); |
160 | void mimetypes_nomem (void); | ||
160 | 161 | ||
161 | int mimetypes_open (const char *name); | 162 | int mimetypes_open (const char *name); |
162 | void mimetypes_close (void); | 163 | void mimetypes_close (void); |