File CVE-2025-63745.patch of Package radare2
diff -Nurp radare2-6.0.4.orig/libr/bin/format/ne/ne.c radare2-6.0.4/libr/bin/format/ne/ne.c
--- radare2-6.0.4.orig/libr/bin/format/ne/ne.c 2025-11-17 08:21:03.903680720 +0000
+++ radare2-6.0.4/libr/bin/format/ne/ne.c 2025-11-17 08:40:06.163680720 +0000
@@ -78,7 +78,7 @@ static char *__func_name_from_ord(const
RList *r_bin_ne_get_segments(r_bin_ne_obj_t *bin) {
int i;
- if (!bin || !bin->segment_entries) {
+ if (!bin || !bin->segment_entries || !bin->ne_header) {
return NULL;
}
RList *segments = r_list_newf (free);
@@ -108,6 +108,9 @@ static int __find_symbol_by_paddr(const
RList *r_bin_ne_get_symbols(r_bin_ne_obj_t *bin) {
RBinSymbol *sym;
+ if (!bin->ne_header) {
+ return NULL;
+ }
ut16 off = bin->ne_header->ResidNamTable + bin->header_offset;
RList *symbols = r_list_newf (free);
if (!symbols) {
@@ -139,9 +142,6 @@ RList *r_bin_ne_get_symbols(r_bin_ne_obj
name[sz] = '\0';
off += sz;
sym = R_NEW0 (RBinSymbol);
- if (!sym) {
- break;
- }
sym->name = r_bin_name_new_from (name);
if (!first) {
sym->bind = R_BIN_BIND_GLOBAL_STR;
@@ -268,7 +268,7 @@ static void __free_resource(void *resour
}
static bool __ne_get_resources(r_bin_ne_obj_t *bin) {
- if (!bin->resources) {
+ if (!bin->resources || !bin->ne_header) {
bin->resources = r_list_newf (__free_resource);
}
ut16 resoff = bin->ne_header->ResTableOffset + bin->header_offset;
@@ -320,7 +320,7 @@ static bool __ne_get_resources(r_bin_ne_
RList *r_bin_ne_get_imports(r_bin_ne_obj_t *bin) {
RList *imports = r_list_newf ((RListFree)r_bin_import_free);
- if (!imports) {
+ if (!imports || !bin->ne_header) {
return NULL;
}
ut16 off = bin->ne_header->ImportNameTable + bin->header_offset + 1;
@@ -352,13 +352,10 @@ RList *r_bin_ne_get_imports(r_bin_ne_obj
}
RList *r_bin_ne_get_entrypoints(r_bin_ne_obj_t *bin) {
- if (!bin->entry_table) {
+ if (!bin->entry_table || !bin->ne_header) {
return NULL;
}
RList *entries = r_list_newf (free);
- if (!entries) {
- return NULL;
- }
RList *segments = r_bin_ne_get_segments (bin);
if (!segments) {
r_list_free (entries);
@@ -439,7 +436,7 @@ RList *r_bin_ne_get_entrypoints(r_bin_ne
RList *r_bin_ne_get_relocs(r_bin_ne_obj_t *bin) {
RList *segments = bin->segments;
- if (!segments) {
+ if (!segments || !bin->ne_header) {
return NULL;
}
RList *entries = bin->entries;
@@ -598,9 +595,6 @@ RList *r_bin_ne_get_relocs(r_bin_ne_obj_
void __init(RBuffer *buf, r_bin_ne_obj_t *bin) {
bin->header_offset = r_buf_read_le16_at (buf, 0x3c);
bin->ne_header = R_NEW0 (NE_image_header);
- if (!bin->ne_header) {
- return;
- }
bin->buf = buf;
if (r_buf_fread_at (buf, bin->header_offset, (ut8 *)bin->ne_header, "4c2si4c4si8si3s2c3s2c", 1) < 1) {
R_FREE (bin->ne_header);
@@ -658,9 +652,6 @@ void r_bin_ne_free(r_bin_ne_obj_t *bin)
r_bin_ne_obj_t *r_bin_ne_new_buf(RBuffer *buf, bool verbose) {
r_bin_ne_obj_t *bin = R_NEW0 (r_bin_ne_obj_t);
- if (!bin) {
- return NULL;
- }
- __init(buf, bin);
+ __init (buf, bin);
return bin;
}
diff -Nurp radare2-6.0.4.orig/libr/bin/p/bin_ne.c radare2-6.0.4/libr/bin/p/bin_ne.c
--- radare2-6.0.4.orig/libr/bin/p/bin_ne.c 2025-11-17 08:10:08.299680720 +0000
+++ radare2-6.0.4/libr/bin/p/bin_ne.c 2025-11-17 08:35:48.943680720 +0000
@@ -77,10 +77,10 @@ static void header(RBinFile *bf) {
static RBinInfo *info(RBinFile *bf) {
r_bin_ne_obj_t *ne = bf->bo->bin_obj;
RBinInfo *i = R_NEW0 (RBinInfo);
- if (i) {
- i->bits = 16;
- i->arch = strdup ("x86");
- i->os = strdup (ne->os);
+ i->bits = 16;
+ i->arch = strdup ("x86");
+ i->os = strdup (ne->os? ne->os: "os2");
+ if (ne->ne_header) {
i->claimed_checksum = r_str_newf ("%08x", ne->ne_header->FileLoadCRC);
}
return i;