Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions r2plugin/r_anal_sleigh.c
Original file line number Diff line number Diff line change
Expand Up @@ -4587,6 +4587,28 @@ static bool verify_callconv_apply(RAnal *anal, ut64 fcn_addr, const char *cc_nam
return strings_match_normalized (target_fcn->callconv, cc_name);
}

static bool signature_contains_cmd_separator(const char *signature) {
const unsigned char *p;

if (!signature || !*signature) {
return false;
}
for (p = (const unsigned char *)signature; *p; p++) {
switch (*p) {
case ';':
case '|':
case '&':
case '\n':
case '\r':
case '!':
return true;
default:
break;
}
}
return false;
}

static WritebackApplyResult apply_inferred_signature(
RAnal *anal,
RCore *core,
Expand All @@ -4613,6 +4635,12 @@ static WritebackApplyResult apply_inferred_signature(
return res;
}
res.cmd_fallback_attempted = true;
if (signature_contains_cmd_separator (signature)) {
write_reason_msg (res.detail, sizeof (res.detail),
"signature contains command separator");
res.cmd_apply_fail = true;
return res;
}
r_core_cmdf_at (core, fcn->addr, "afs %s", signature);
if (verify_signature_type_db_ex (anal, fcn, sig_root, res.detail, sizeof (res.detail))) {
res.path = WRITEBACK_APPLY_CMD;
Expand Down
Loading