R_API FILE *r_sandbox_fopen (const char *path, const char *mode) { FILE *ret = NULL; char *epath = NULL; if (!path) { return NULL; } if (enabled) { if (strchr (mode, 'w') || strchr (mode, 'a') || strchr (mode, '+')) { return NULL; } epath = expand_home (path); if (!r_sandbox_check_path (epath)) { free (epath); return NULL; } } if (!epath) { epath = expand_home (path); } if ((strchr (mode, 'w') || r_file_is_regular (epath))) { ret = fopen (epath, mode); } free (epath); return ret; }
static void radare2_rc(RCore *r) { char* env_debug = r_sys_getenv ("R_DEBUG"); bool has_debug = false; if (env_debug) { has_debug = true; R_FREE (env_debug); } char *homerc = r_str_home (".radare2rc"); if (homerc && r_file_is_regular (homerc)) { if (has_debug) { eprintf ("USER CONFIG loaded from %s\n", homerc); } r_core_cmd_file (r, homerc); } free (homerc); homerc = r_str_home (".config/radare2/radare2rc"); if (homerc && r_file_is_regular (homerc)) { if (has_debug) { eprintf ("USER CONFIG loaded from %s\n", homerc); } r_core_cmd_file (r, homerc); } free (homerc); homerc = r_str_home (".config/radare2/radare2rc.d"); if (homerc) { if (r_file_is_directory (homerc)) { char *file; RListIter *iter; RList *files = r_sys_dir (homerc); r_list_foreach (files, iter, file) { if (*file != '.') { char *path = r_str_newf ("%s/%s", homerc, file); if (r_file_is_regular (path)) { if (has_debug) { eprintf ("USER CONFIG loaded from %s\n", homerc); } r_core_cmd_file (r, path); } free (path); } } r_list_free (files); } free (homerc); } }
R_API FILE *r_sandbox_fopen (const char *path, const char *mode) { FILE *ret = NULL; char *epath = NULL; if (!path) { return NULL; } if (enabled) { if (strchr (mode, 'w') || strchr (mode, 'a') || strchr (mode, '+')) { return NULL; } epath = expand_home (path); if (!r_sandbox_check_path (epath)) { free (epath); return NULL; } } if (!epath) { epath = expand_home (path); } if ((strchr (mode, 'w') || r_file_is_regular (epath))) { #if __WINDOWS__ wchar_t *wepath = r_utf8_to_utf16 (epath); if (!wepath) { free (epath); return ret; } wchar_t *wmode = r_utf8_to_utf16 (mode); if (!wmode) { free (wepath); free (epath); return ret; } ret = _wfopen (wepath, wmode); free (wmode); free (wepath); #else // __WINDOWS__ ret = fopen (epath, mode); #endif // __WINDOWS__ } free (epath); return ret; }