void my_safe_print_str(const char* name, const char* val, int max_len) { char *heap_end= (char*) sbrk(0); fprintf(stderr, "%s at %p ", name, val); if (!PTR_SANE(val)) { fprintf(stderr, "is an invalid pointer\n"); return; } fprintf(stderr, "= "); for (; max_len && PTR_SANE(val) && *val; --max_len) fputc(*val++, stderr); fputc('\n', stderr); }
void my_safe_print_str(const char* val, int max_len) { char *heap_end; #ifdef __linux__ if (!safe_print_str(val, max_len)) return; #endif heap_end= (char*) sbrk(0); if (!PTR_SANE(val)) { my_safe_printf_stderr("%s", "is an invalid pointer\n"); return; } for (; max_len && PTR_SANE(val) && *val; --max_len) my_write_stderr((val++), 1); my_safe_printf_stderr("%s", "\n"); }
int my_safe_print_str(const char* val, int max_len) { char *heap_end; #ifdef __linux__ // Try and make use of /proc filesystem to safely print memory contents. if (!safe_print_str(val, max_len)) return 0; #endif heap_end= (char*) sbrk(0); if (!PTR_SANE(val)) { my_safe_printf_stderr("%s", "is an invalid pointer"); return 1; } for (; max_len && PTR_SANE(val) && *val; --max_len) my_write_stderr((val++), 1); my_safe_printf_stderr("%s", "\n"); return 0; }