diff options
Diffstat (limited to 'elf/eval.c')
-rw-r--r-- | elf/eval.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/elf/eval.c b/elf/eval.c index 91415bb6b6..59eb234166 100644 --- a/elf/eval.c +++ b/elf/eval.c @@ -1,6 +1,7 @@ #include <stdio.h> #include <ctype.h> #include <stdlib.h> +#include <unistd.h> #include <dlfcn.h> static void *funcall (char **stringp); @@ -27,6 +28,13 @@ funcall (char **stringp) /* Swallow closing paren. */ ++*stringp; + if (args[0] == NULL) + { + static const char unknown[] = "Unknown function\n"; + write (1, unknown, sizeof unknown - 1); + return NULL; + } + /* Do it to it. */ __builtin_return (__builtin_apply (args[0], &argcookie, @@ -81,7 +89,7 @@ eval (char **stringp) value = p; do ++p; - while (*p != '\0' && !isspace (*p) && !ispunct (*p)); + while (*p != '\0' && !isspace (*p) && (!ispunct (*p) || *p == '_')); c = *p; *p = '\0'; value = dlsym (NULL, value); |