#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);
}
/* ',' 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);
/* 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;
*/
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];
}
static int tracked_fds_find_slow(int fd) {
assert(initialized);
+ assert(fd >= 0);
if (tracked_fds_list_count == 0) {
return 0;