--- /dev/null
+diff -up jwhois-4.0/src/jwhois.c.orig jwhois-4.0/src/jwhois.c
+--- jwhois-4.0/src/jwhois.c.orig 2007-06-26 08:59:35.000000000 +0200
++++ jwhois-4.0/src/jwhois.c 2011-05-24 12:29:37.398892451 +0200
+@@ -98,7 +98,7 @@ main(int argc, char **argv)
+
+ /* Parse remaining arguments and place them into the wq
+ structure. */
+- while (optind < argc)
++ while (optind < argc-1)
+ {
+ count += strlen(argv[optind])+1;
+ if (!qstring)
+@@ -116,19 +116,25 @@ main(int argc, char **argv)
+ strcat(qstring, " ");
+ optind++;
+ }
+- qstring[strlen(qstring)-1] = '\0';
+ #ifdef LIBIDN
+- rc = idna_to_ascii_lz(qstring, &idn, 0);
++ rc = idna_to_ascii_lz(argv[optind], &idn, 0);
+ if (rc != IDNA_SUCCESS)
+ {
+- printf("[IDN encoding of '%s' failed with error code %d]\n", qstring, rc);
++ printf("[IDN encoding of '%s' failed with error code %d]\n", argv[optind], rc);
+ exit(1);
+ }
+- wq.query = strdup(idn);
++ qstring = realloc(qstring, count+strlen(idn)+1);
++ memcpy(qstring+count,
++ idn,
++ strlen(idn)+1);
+ free(idn);
+ #else
+- wq.query = qstring;
++ qstring = realloc(qstring, count+strlen(argv[optind])+1);
++ memcpy(qstring+count,
++ argv[optind],
++ strlen(argv[optind])+1);
+ #endif
++ wq.query = qstring;
+
+ if (ghost)
+ {