X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Ftrackfds.h;h=f0ba8791d8485fd5441ae7bcd45109bdda482560;hb=ba2283bd3780a13f26521c5c47deedfc7184ed7d;hp=70751d760c68bb6ee3ad2fe924348f1ee6d3ee52;hpb=59375c2b7949791d8cad8e5cebde2649bac83ec8;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/trackfds.h b/src/trackfds.h index 70751d7..f0ba879 100644 --- a/src/trackfds.h +++ b/src/trackfds.h @@ -100,7 +100,7 @@ static void init_from_environment(void) { #ifdef DEBUG debug(" getenv(\"%s\"): \"%s\"\n", ENV_NAME_FDS, env); #endif - /* Environment is read-only. */ + /* Environment must be treated read-only. */ char env_copy[strlen(env) + 1]; strcpy(env_copy, env); @@ -124,14 +124,14 @@ static void init_from_environment(void) { } /* ',' at the beginning or double ',' - ignore. */ if (x == last) { - last = x + 1; - continue; + goto next; } if (i == count) { break; } + /* Replace ',' to null-terminate number for atoi(). */ *x = 0; int fd = atoi(last); @@ -184,7 +184,7 @@ static char *update_environment_buffer_entry(char *x, int fd) { /* Write comma after number. */ x += length; *x++ = ','; - /* Make sure the string is always zero terminated. */ + /* Make sure the string is always null-terminated. */ *x = 0; return x; @@ -329,7 +329,11 @@ static int tracked_fds_find_slow(int fd) noinline; */ inline static int tracked_fds_find(int fd) always_inline; inline static int tracked_fds_find(int fd) { - assert(fd >= 0); + /* Invalid file descriptor. No assert() as we're called from the hooked + * macro. */ + if (unlikely(fd < 0)) { + return 0; + } if (fd < TRACKFDS_STATIC_COUNT) { return tracked_fds[fd]; @@ -339,6 +343,7 @@ inline static int tracked_fds_find(int fd) { } static int tracked_fds_find_slow(int fd) { assert(initialized); + assert(fd >= 0); if (tracked_fds_list_count == 0) { return 0;