ref: d2f2f98130f28e9e02a4210f1096c1bd3afffb93
parent: 5a522b88668d1295302293de3f86c0b2869ee57a
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Thu Aug 29 05:42:30 EDT 2019
[libmach] Fix error codes in readobj() There were cases where we were not setting errno and we were returning error in case of having an empty string table.
--- a/src/libmach/coff32/coff32read.c
+++ b/src/libmach/coff32/coff32read.c
@@ -154,13 +154,15 @@
if (fread(buf, 4, 1, fp) != 1)
return 0;
unpack(ORDER(obj->type), buf, "l", &siz);
+ coff->strsiz = 0;
if (siz == 4)
- return 0;
+ return 1;
if (siz > 4) {
- if (siz > SIZE_MAX)
+ if (siz > SIZE_MAX) {
+ errno = ERANGE;
return 0;
- str = malloc(siz);
- if (!str)
+ }
+ if ((str = malloc(siz)) == NULL)
return 0;
coff->strtbl = str;
coff->strsiz = siz;
@@ -207,8 +209,10 @@
if (fread(buf, RELSZ, 1, fp) != 1)
return 0;
unpack_reloc(ORDER(obj->type), buf, &rp[i]);
- if (rp[i].r_symndx >= hdr->f_nsyms)
+ if (rp[i].r_symndx >= hdr->f_nsyms) {
+ errno = ERANGE;
return 0;
+ }
}
}