/*
  * filter_get_keyword - read the next filter keyword from buffer
  *
- * Search for keywords (limited to ascii alphabetic characters) in
- * the passed in line buffer. Returns NULL when the buffer is empty or the first
- * char is not alpha. The char '_' is allowed, except as the first character.
+ * Search for keywords (strings of non-whitespace characters) in the passed
+ * in line buffer. Returns NULL when the buffer is empty or no keyword exists.
  * The length of the found keyword is returned in the size parameter.
  */
 static const char *
    const char *ptr = *line;
    const char *result = NULL;
 
+   /* The passed buffer must not be NULL */
+   Assert(*line != NULL);
+
    /* Set returned length preemptively in case no keyword is found */
    *size = 0;
 
    while (isspace((unsigned char) *ptr))
        ptr++;
 
-   if (isalpha((unsigned char) *ptr))
+   /* Grab one keyword that's the string of non-whitespace characters */
+   if (*ptr != '\0' && !isspace((unsigned char) *ptr))
    {
        result = ptr++;
 
-       while (isalpha((unsigned char) *ptr) || *ptr == '_')
+       while (*ptr != '\0' && !isspace((unsigned char) *ptr))
            ptr++;
 
        *size = ptr - result;
 
    qr/invalid filter command/,
    "invalid syntax: incorrect filter command");
 
-# Test invalid object type
+# Test invalid object type.
+#
+# This test also verifies that keywords are correctly recognized as strings of
+# non-whitespace characters. If the parser incorrectly treats non-whitespace
+# delimiters (like hyphens) as keyword boundaries, "table-data" might be
+# misread as the valid object type "table". To catch such issues,
+# "table-data" is used here as an intentionally invalid object type.
 open $inputfile, '>', "$tempdir/inputfile.txt"
   or die "unable to open filterfile for writing";
-print $inputfile "include xxx";
+print $inputfile "exclude table-data one";
 close $inputfile;
 
 command_fails_like(
        '--filter' => "$tempdir/inputfile.txt",
        'postgres'
    ],
-   qr/unsupported filter object type: "xxx"/,
-   "invalid syntax: invalid object type specified, should be table, schema, foreign_data or data"
+   qr/unsupported filter object type: "table-data"/,
+   "invalid syntax: invalid object type specified"
 );
 
 # Test missing object identifier pattern